解决方案 »
- asp.net中Gridview更新时出现错误: 至少一个参数没有被指定值。
- 分页存储过程分页不对.第一页为1~5记录(5条),第二页是5~10记录(6条)
- 关于owc的简单问题 怎样画一条与横坐标垂直的直线?
- textbox换行问题
- 如何让javascript中的var a =4.442保留两位四舍五如呢?var a = 4.44
- 如何清空数据绑定控件中的数据记录
- datagrid显示到第二页后,我换条件查询,新的显示默认在第二页,如果没有那么多数据到第二页,还出错,怎么处理?
- 数组问题。stringbuilder问题。(c#)
- iframe 嵌套 頁面 後臺事件 不執行 同時報404錯誤
- 60分请问大家,你们是怎么调试ASP.NET程序的
- 急!!!GirdView逻辑删除的问题。急!!!
- 请教一下,我现在在做一个支持多个国家语言的外贸网站,正在发愁多语言怎么做呢?
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Collections;
using System.Net.Mime;
using System.Globalization;
using System.IO; namespace Helper
{
/// <summary>
/// 上传
/// </summary>
public class UploadHelper
{
// 边界数据
/// <summary>
/// 边界数据(boundary = "---------------------------7db38610205dc")
/// </summary>
public string BoundaryData { get; set; } //数据编码
/// <summary>
/// 数据编码,默认为UTF8
/// </summary>
public Encoding Encoding { get; set; } //尾部数据
/// <summary>
/// 尾部数据
/// </summary>
private string EndData
{
get
{
return Environment.NewLine + "--" + this.BoundaryData + "--" + Environment.NewLine;
}
} /// <summary>
/// ctor
/// </summary>
public UploadHelper()
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", NumberFormatInfo.CurrentInfo);
this.BoundaryData = boundary;
this.Encoding = Encoding.UTF8;
} /// <summary>
/// ctor
/// </summary>
public UploadHelper(Encoding encoding)
{
this.Encoding = encoding;
} /// <summary>
/// ctor
/// </summary>
public UploadHelper(string boundary, Encoding encoding)
{
this.BoundaryData = boundary;
this.Encoding = encoding;
} //普通 表单属性 数据
/// <summary>
/// 普通 表单属性 数据(-----------------------------7db210302011cc\r\nContent-Disposition: form-data; name="Mobile")
/// </summary>
/// <param name="fieldName">属性名 </param>
/// <param name="fieldValue">属性值 </param>
/// <returns> </returns>
public byte[] CreateNormalFieldData(string fieldName, string fieldValue)
{
string data = "{1}{0}Content-Disposition: form-data; name=\"{2}\"{0}{0}{3}{0}";
data = string.Format(data, Environment.NewLine, "--" + this.BoundaryData, fieldName, fieldValue);
return this.Encoding.GetBytes(data);
} //上传文件属性 数据
/// <summary>
/// 上传文件属性 数据
/// </summary>
/// <param name="fieldName">属性名 </param>
/// <param name="fileName">上传文件名 </param>
/// <param name="content_type">上传文件类型 </param>
/// <param name="fileBytes">byte数组 </param>
/// <returns> </returns>
public byte[] CreateFileFieldData(string fieldName, string fileName, string content_type, byte[] fileBytes)
{
string data = "{1}{0}Content-Disposition: form-data; name=\"{2}\"; filename=\"{3}\"{0}Content-Type: {4}{0}{0}";
data = string.Format(data, Environment.NewLine, "--" + this.BoundaryData, fieldName, fileName, content_type);
byte[] dataBytes = this.Encoding.GetBytes(data);
byte[] resultBytes = new byte[dataBytes.Length + fileBytes.Length];
dataBytes.CopyTo(resultBytes, 0);
fileBytes.CopyTo(resultBytes, dataBytes.Length);
return resultBytes;
} //上传文件属性 数据
/// <summary>
/// 上传文件属性 数据
/// </summary>
/// <param name="fieldName">属性名 </param>
/// <param name="fileName">上传文件名 </param>
/// <param name="content_type">上传文件类型 </param>
/// <param name="stream">上传的文件流 </param>
/// <returns> </returns>
public byte[] CreateFileFieldData(string fieldName, string fileName, string content_type, Stream stream)
{
return CreateFileFieldData(fieldName, fileName, content_type, UploadHelper.StreamToBytes(stream));
} //上传文件
/// <summary>
/// 上传 文件
/// </summary>
/// <param name="webClient">WebClient </param>
/// <param name="uploadUrl">上传地址 </param>
/// <param name="length">上传数据的长度 </param>
/// <param name="postDataBytes">上传的数据 </param>
/// <returns>服务响应的结果 </returns>
public string UploadData(WebClient webClient, string uploadUrl, int length, params byte[][] postDataBytes)
{
webClient.Headers.Add("Content-Type", "multipart/form-data; boundary=" + this.BoundaryData);
byte[] ends = this.Encoding.GetBytes(this.EndData);
byte[] bytes = new byte[length + ends.Length];
int eachLength = 0;
foreach (var item in postDataBytes)
{
item.CopyTo(bytes, eachLength);
eachLength += item.Length;
}
ends.CopyTo(bytes, eachLength);
byte[] responseData = webClient.UploadData(uploadUrl, bytes);
string resultStr = this.Encoding.GetString(responseData);
resultStr = resultStr.Replace("\t", "").Replace("\r", "").Replace("\n", "");
return resultStr;
} // 上传 普通数据
/// <summary>
/// 上传 普通数据
/// </summary>
/// <param name="webClient">WebClient </param>
/// <param name="uploadUrl">上传地址 </param>
/// <param name="postData">数据 </param>
/// <returns> </returns>
public string UploadData(WebClient webClient, string uploadUrl, string postData)
{
webClient.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] bytes = this.Encoding.GetBytes(postData);
byte[] responseData = webClient.UploadData(uploadUrl, "POST", bytes);
string srcString = this.Encoding.GetString(responseData);
srcString = srcString.Replace("\t", "").Replace("\r", "").Replace("\n", "");
return srcString;
}
//将 Stream 转成 byte[]
/// <summary>
/// 将 Stream 转成 byte[]
/// </summary>
/// <param name="stream">流 </param>
/// <returns>byte[] </returns>
public static byte[] StreamToBytes(Stream stream)
{
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
stream.Seek(0, SeekOrigin.Begin);
return bytes;
}
}
}
不行啊,你这样不能 混合上传啊,既有文件 又有其他 字段怎么办??
可以混合上传的..
本来就是混合上传的。