//address uri地址,fileNamePath 文件路径,saveName 文件名
public void Upload_Request2(string address, string fileNamePath, string saveName)
{
var fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
var r = new BinaryReader(fs); //时间戳
var strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
var boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + strBoundary + "--\r\n"); //请求头部信息
var sb = new StringBuilder();
sb.Append("--");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append("file");
sb.Append("\"; filename=\"");
sb.Append(saveName);
sb.Append("\";");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append("application/octet-stream");
sb.Append("\r\n");
sb.Append("\r\n");
var strPostHeader = sb.ToString();
var postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader); // 根据uri创建HttpWebRequest对象
var httpReq = (HttpWebRequest) WebRequest.Create(new Uri(address));
httpReq.Method = "POST"; //对发送的数据不使用缓存
httpReq.AllowWriteStreamBuffering = false; //设置获得响应的超时时间(300秒)
httpReq.Timeout = 300000;
httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;
var length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length;
var fileLength = fs.Length;
httpReq.ContentLength = length;
try
{
//每次上传4k
var bufferLength = 4096;
var buffer = new byte[bufferLength]; //已上传的字节数
long offset = 0; //开始上传时间
var startTime = DateTime.Now;
var size = r.Read(buffer, 0, bufferLength);
var postStream = httpReq.GetRequestStream(); //发送请求头部消息
postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
while (size > 0)
{
postStream.Write(buffer, 0, size);
offset += size;
var span = DateTime.Now - startTime;
var second = span.TotalSeconds;
size = r.Read(buffer, 0, bufferLength);
}
//添加尾部的时间戳
postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
postStream.Close(); //获取服务器端的响应
var webRespon = httpReq.GetResponse();
var s = webRespon.GetResponseStream();
//读取服务器端返回的消息
var sr = new StreamReader(s);
s.Close();
sr.Close();
}
catch
{
}
finally
{
fs.Close();
r.Close();
}
}
c#实现文件上传
最新推荐文章于 2024-06-28 15:20:18 发布