zoukankan      html  css  js  c++  java
  • c#上传大文件方法

    客户端代码:

     /// <summary>
    
            /// 将本地文件上传到指定的服务器(HttpWebRequest方法)
    
            /// </summary>
    
            /// <param name="address">文件上传到的服务器</param>
    
            /// <param name="fileNamePath">要上传的本地文件(全路径)</param>
    
            /// <param name="saveName">文件上传后的名称</param>
    
            /// <returns>服务器反馈信息</returns>
    
            private string Upload_Request(string address, string fileNamePath, string saveName)
            {
    
                // 要上传的文件
    
                FileStream fs = new FileStream(fileNamePath, FileMode.Open, FileAccess.Read);
    
                BinaryReader r = new BinaryReader(fs);
    
    
    
                //时间戳
    
                string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
    
                byte[] boundaryBytes = Encoding.ASCII.GetBytes("
    --" + strBoundary + "
    ");
    
    
    
                //请求头部信息
    
                StringBuilder sb = new StringBuilder();
    
                sb.Append("--");
    
                sb.Append(strBoundary);
    
                sb.Append("
    ");
    
                sb.Append("Content-Disposition: form-data; name="");
    
                sb.Append("file");
    
                sb.Append(""; filename="");
    
                sb.Append(saveName);
    
                sb.Append(""");
    
                sb.Append("
    ");
    
                sb.Append("Content-Type: ");
    
                sb.Append("application/octet-stream");
    
                sb.Append("
    ");
    
                sb.Append("
    ");
    
    
    
                string strPostHeader = sb.ToString();
    
                byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
    
    
    
                // 根据uri创建HttpWebRequest对象
    
                HttpWebRequest httpReq = (HttpWebRequest)WebRequest.Create(new Uri(address));
    
                httpReq.Method = "POST";
    
    
    
                //对发送的数据不使用缓存【重要、关键】
    
                httpReq.AllowWriteStreamBuffering = false;
    
    
    
                //设置获得响应的超时时间(300秒)
    
                //httpReq.Timeout = 300000;
    
                httpReq.ContentType = "multipart/form-data; boundary=" + strBoundary;
    
                long length = fs.Length + postHeaderBytes.Length + boundaryBytes.Length;
    
                long fileLength = fs.Length;
    
                httpReq.ContentLength = length;
    
                try
                {
                    //每次上传4k
    
                    int bufferLength = 4096;
    
                    byte[] buffer = new byte[bufferLength];
    
    
    
                    //已上传的字节数
    
                    long offset = 0;
    
    
    
                    //开始上传时间
    
                    DateTime startTime = DateTime.Now;
    
                    int size = r.Read(buffer, 0, bufferLength);
    
                    Stream postStream = httpReq.GetRequestStream();
    
    
    
                    //发送请求头部消息
    
                    postStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);
    
                    while (size > 0)
                    {
    
                        postStream.Write(buffer, 0, size);
    
                        offset += size;
    
    
                        TimeSpan span = DateTime.Now - startTime;
                        //1024*1024=1048576
                        size = r.Read(buffer, 0, bufferLength);
    
                    }
    
                    //添加尾部的时间戳
    
                    postStream.Write(boundaryBytes, 0, boundaryBytes.Length);
    
                    postStream.Close();
    
    
    
                    //获取服务器端的响应
    
                    WebResponse webRespon = httpReq.GetResponse();
    
                    Stream s = webRespon.GetResponseStream();
    
                    StreamReader sr = new StreamReader(s);
    
    
    
                    //读取服务器端返回的消息
    
                    string serverMsg = sr.ReadLine();
                    s.Close();
    
                    sr.Close();
    
    
    
                }
    
                catch (Exception ex)
                {
    
    
                }
    
                finally
                {
    
                    fs.Close();
    
                    r.Close();
    
                }
    
    
    
                return "";
    
            }
    

     服务端:

      HttpPostedFileBase file = Request.Files[0];
                file.SaveAs(Server.MapPath("~/file/k.iso"));
    

     客户端调用:

     Upload_Request("http://localhost:7115/test/index", "d:\t.rar", "kk");

  • 相关阅读:
    vbox安装增强功能,实现宿主机文件夹共享并浏览器访问
    linux镜像下载
    linux命令之sed
    关于MySQL数据库的备份方案
    linux防火墙使用以及配置
    Jenkins安装部署(二)
    Jenkins安装部署(一)
    Centos7在虚拟机中扩展磁盘空间
    CentOS 7系统根目录分区扩容
    Linux下的SVN服务器搭建
  • 原文地址:https://www.cnblogs.com/gaocong/p/5512371.html
Copyright © 2011-2022 走看看