当前位置: 代码迷 >> ASP.NET >> 下传大文件有关问题! 进来看上
  详细解决方案

下传大文件有关问题! 进来看上

热度:94   发布时间:2013-02-25 00:00:00.0
上传大文件问题! 进来看下!
在本地测试上传80M的文件,4秒左右就传完了, 上传服务器,过了几十秒都上传不上去

  而且还出现该页无法显示了。


  是什么原因????

------解决方案--------------------------------------------------------
断点续传
上传
断点续传
C# code
using System;using System.Collections.Generic;using System.Text;using System.Collections.Specialized;using System.Net;using System.Net.Sockets;using System.IO;namespace CompleteClient{    /// <summary>    /// 文件发送工作类    /// </summary>    class PostFile    {        /// <summary>        /// 通过post发送指定文件的指定字段到指定的uri上        /// </summary>        /// <param name="uploadfile">上传文件路径</param>        /// <param name="url">上传的到的URi位置</param>        /// <param name="offset">当前偏移量</param>        /// <param name="size">需要发送的块大小</param>        /// <param name="fileFormName">服务器端"GET"取得的文件名</param>        /// <param name="contenttype">文件类型(保留用)</param>        /// <param name="querystring">GET数组(供服务器用GET取得一些信息)</param>        /// <param name="cookies">本地cookies(保留用)</param>        /// <returns>uri的response的内容以string的形式返回</returns>        public string UploadFileEx(string uploadfile, string url, long offset, long size,                                   string fileFormName, string contenttype,                                   NameValueCollection querystring, CookieContainer cookies)        {            if ((fileFormName == null) ||            (fileFormName.Length == 0))            {                fileFormName = "file";            }            if ((contenttype == null) ||            (contenttype.Length == 0))            {                contenttype = "application/octet-stream";            }            string postdata;            postdata = "?";            if (querystring != null)            {                foreach (string key in querystring.Keys)                {                    postdata += key + "=" + querystring.Get(key) + "&";                }            }            Uri uri = new Uri(url + postdata);            string boundary = "----------" + DateTime.Now.Ticks.ToString("x");            HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);            webrequest.CookieContainer = cookies;            webrequest.ContentType = "multipart/form-data; boundary=" + boundary;            webrequest.Method = "POST";            // 构造一个post请求的http头            StringBuilder sb = new StringBuilder();            sb.Append("--");            sb.Append(boundary);            sb.Append("\r\n");            sb.Append("Content-Disposition: form-data; name=\"");            sb.Append(fileFormName);            sb.Append("\"; filename=\"");            sb.Append(Path.GetFileName(uploadfile));            sb.Append("\"");            sb.Append("\r\n");            sb.Append("Content-Type: ");            sb.Append(contenttype);            sb.Append("\r\n");            sb.Append("\r\n");            string postHeader = sb.ToString();            byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);            // Build the trailing boundary string as a byte array            // ensuring the boundary appears on a line by itself            byte[] boundaryBytes =            Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");            FileStream fileStream = new FileStream(uploadfile,                            FileMode.Open, FileAccess.Read);            long length = postHeaderBytes.Length + (long)size +                                       boundaryBytes.Length;            webrequest.ContentLength = length;            Stream requestStream = webrequest.GetRequestStream();            // 写入post头            requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length);            // 写入文件内容            byte[] buffer = new Byte[size];            fileStream.Seek(offset, SeekOrigin.Current);            fileStream.Read(buffer, 0, buffer.Length);            requestStream.Write(buffer, 0, buffer.Length);            // 写入post请求的尾            requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);            //读取服务器的反馈消息            WebResponse responce = webrequest.GetResponse();            Stream s = responce.GetResponseStream();            StreamReader sr = new StreamReader(s);            return sr.ReadToEnd();        }    }}
  相关解决方案