c#实现文件上传

//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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值