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("\r\n--" + strBoundary + "\r\n");

            //请求头部信息

            StringBuilder 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");

            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");

时间: 2024-10-04 20:24:28

c#上传大文件方法的相关文章

运用php上传大文件配置方法

网站建设:运用php上传大文件配置方法如下: 翻开php.ini, 1.第一找出 file uploads区域,有影响文件上传的以下几个参数: file_uploads = on ;能否准许经过http上传文件的开关.默许为on即是开 upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,假设没指定就会用系统默许的临时文件夹 upload_max_filesize = 8m ;望文生意,即准许上传文件大小的最大值.默许为2m 2.在resource limits区域,还有参数 ;

IIS上传大文件

IIS7.0上传文件限制的解决方法 在 Windows7(iis7.5).Win2008(iis 7.0)和Win2003(iis 6.0) 中,默认设置是特别严格和安全的,这样可以最大限度地减少因以前太宽松的超时和限制而造成的攻击.指定 ASP 请求的实体主体中允许大小为 200,000 (IIS6为204,800) 个字节,在 iis 6.0 之前的版本中,例如:Windows XP(IIS 5.1),没有限制. 这就造成了文件上传不能超过200k,而事实上是提交数据不能超过200k,你可以

上传大文件&amp;验证码

c#如何上传大文件? 想要想上传大文件,必须在web.config文件中进行配置. 在<system.web>节点中添加如下代码即可: <httpRuntime maxRequestLength="2097151"/> 这个代码就是表示设置最大请求值,上传文件也就相当于请求.maxRequestLength单位为KB,最大值为:209715 如果不设置,默认为4096 KB (4 MB). 也就是说上传的文件最大可以上传2G以内的文件. 一般没有配置的话,默认只

IIS7下swfupload上传大文件出现404错误

要求上传附件大小限制在2G,原本以为可以轻松搞定.在编译模式下可以上传大文件,可是在IIS7下(自己架的服务器),一上传大的文件就会出现 Http 404错误,偶尔有的文件还有IO. error错误.一直搞不明白,在网上搜索大概了解上传控件分为两种上传模式: 1,将文件一次性读到内存中,然后再写到服务上.这样,如果文件太大就会导致服务响应变慢. 2,国外的上传控件Lion.Web.UpLoadModule,AspnetUpload(我也是通过网上搜索的),是将文件分块读取,读一些,写一些到硬盘上

php上传大文件时出现错误

在实现文件上传功能时,发现小文件可以上传(低于8M),但是上传大文件时,会出现以下错误: exception 'yii\web\BadRequestHttpException' with message 'Unable to verify your data submission.' in /var/www/html/labweb/vendor/yiisoft/yii2/web/Controller.php:110 Stack trace: #0 /var/www/html/labweb/ven

上传大文件的解决方案

需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在500M内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以501M来进行限制. 第一步: 前端修改 由于项目使用的是BJUI前端框架,并没有使用框架本身的文件上传控件,而使用的基于jQuery的Uploadify文件上传组件,在项目使用的jslib项目中找到了BJUI框架集成jQuery Uploadify的部分,这部分代码封装在bjui-all.js文件中, 在bjui-all.js文件中的全局变量定义中有以下

uploadify上传大文件

引言 之前使用Uploadify做了一个上传图片并预览的功能,今天在项目中,要使用该插件上传大文件.之前弄过上传图片的demo,就使用该demo进行测试.可以查看我的这篇文章: [Asp.net]Uploadify所有配置说明,常见bug问题分析 . 大文件上传 第一步:修改uploadify参数 1 'fileSizeLimit': '0',//单个文件大小,0为无限制,可接受KB,MB,GB等单位的字符串值 2 'fileTypeDesc': '文件',//文件描述Image Files 3

WCF利用Stream上传大文件

WCF利用Stream上传大文件 转自别人的文章,学习这个例子,基本上wcf也算入门了,接口用法.系统配置都有了 本文展示了在asp.net中利用wcf的stream方式传输大文件,解决了大文件上传问题.主要是存档方便以后遇到该问题是来查阅.贴出部分代码,如果有疑惑或需要完整代码的请留言 WebForm1.aspx.cs protected void Button1_Click(object sender, EventArgs e) {             FileData file = n

PHP上传遇到的问题-php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项

今天在做上传的时候出现一个非常怪的问题,有时候表单提交可以获取到值,有时候就获取不到了,连普通的字段都获取不到了,苦思冥想还没解决,最后问了师傅,师傅看了说挺奇怪的,然后问我upload_max_filesize的值改了吗,我说改了啊,师傅也解决不了了.过了一会师傅问post_max_size改了吗,我说那个和上传没关系吧,师傅没理我,我还是照着自己的想法继续测试,弄了半天还是不行,最后试了师傅提的意见,成功了,原来上传是和post_max_size有关系的. 总结:php.ini配置文件中的默