日期:2014-05-17  浏览次数:20561 次

大附件上传,支持断点续传,求好的解决方案
最近项目有如题所述的需求,大家给点儿意见,服务端为.NET,客户端不限制,只要能够实现大附件上传断点续传即可。文件大小约为100M左右,当然也会网上增加,求比较好的解决方案。
  之前看了些flex结合asp.net做的项目,但是都不太理想。个人觉得客户端应该通过流文件方式进行提交,服务端接受到数据之后,并写文件。断点续传则先校验传递了多少,然后继续传递,继续追加。
  这是我的思路,但是没有实现,不知道大家有没有更好的办法,败谢

------解决方案--------------------
C#断点续传
http://www.cnblogs.com/bluesky521/archive/2007/06/02/769043.aspx
------解决方案--------------------
http://www.cnblogs.com/bestcomy/archive/2004/08/10/31950.html
------解决方案--------------------
上传
断点续传
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 appe