网上有一个Web超大文件上传断点续传控件:http://www.cnblogs.com/xproer/archive/2012/10/26/2741264.html
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
支持浏览器:Internet Explorer 6,Internet Explorer 7,Internet Explorer 8,Internet Explorer 9
Maxthon(遨游)1.x,Maxthon(遨游)2.x,TT浏览器,QQ浏览器,360安全浏览器,
Chrome(Google浏览器),Maxthon3.x,360极速浏览器6.x,Firefox
粘贴文件,简化选择文件操作:文件MD5值计算进度:文件MD5值计算完毕服务器根据MD5检测是否存在相同文件续传文件从服务器加载文件列表文件上传中文件上传完毕上传文件夹与Discuz!X2整合-后台安装断点续传控件与Discuz!X2整合-后台启用断点续传控件与Discuz!X2整合-后台断点续传控件启用成功与Discuz!X2整合-前台发帖页面与Discuz!X2整合-上传
页面调用示例代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title>
    <link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/>
    <script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script>
    <script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script>
    <script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script>
    <script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script>
    <script language="javascript" type="text/javascript">
     var cbItemLast = null;
     var cbMgr = new CombinBoxMgr();     $(document).ready(function()
     {
     cbMgr.LoadInControl("FilePanel");
     cbMgr.Init();
     });
    </script>
</head>
<body>
<div id="FilePanel"></div>
</body>
</html>

解决方案 »

  1.   

    大文件上传需要借助于控件来实现。你可以在网上搜一下HTTP断点续传控件,已经有成熟的产品了。
      

  2.   

    B/S结构不太合适。
    有.net调用的C/S结构的源代码吗或实现方法吗?
      

  3.   

    http://blog.csdn.net/hank212/article/details/6562918
      

  4.   

    cs可以向服务器上传2g的算吗??
      

  5.   

    算,有合适的吗?
    cs可以向服务器上传2g的算吗??
      

  6.   

    谢谢!不过FTP的速度好象快不起来
      

  7.   

    cs可以向服务器上传2g的算吗??void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                // 要上传的文件地址
                FileStream fs = File.OpenRead(fileInfoIO.FullName);
                // 实例化服务客户的
                ServiceFileClient client = new ServiceFileClient();
                try
                {
                    string path = e.Argument.ToString();
                    int maxSiz = 1024 * 100;
                    System.IO.FileInfo fileInfoIO = new System.IO.FileInfo(path);                // 根据文件名获取服务器上的文件                CustomFileInfo file = client.GetFileInfo(fileInfoIO.Name);                if (file == null)
                    {
                        file = new CustomFileInfo();
                        file.OffSet = 0;
                    }
                    file.Name = fileInfoIO.Name;
                    file.Length = fs.Length;                if (file.Length == file.OffSet) //如果文件的长度等于文件的偏移量,说明文件已经上传完成
                    {
                        MessageBox.Show("该文件已存在");
                        e.Result = false;   // 设置异步操作结果为false
                    }
                    else
                    {
                        while (file.Length != file.OffSet)
                        {
                            file.SendByte = new byte[file.Length - file.OffSet <= maxSiz ? file.Length - file.OffSet : maxSiz]; //设置传递的数据的大小                        fs.Position = file.OffSet; //设置本地文件数据的读取位置
                            fs.Read(file.SendByte, 0, file.SendByte.Length);//把数据写入到file.Data中
                            file = client.UpLoadFileInfo(file); //上传
                            //int percent = (int)((double)file.OffSet / (double)((long)file.Length)) * 100;
                            int percent = (int)(((double)file.OffSet / (double)((long)file.Length)) * 100);
                            (sender as BackgroundWorker).ReportProgress(percent);
                        }
                        // 移动文件到临时目录(此部分创建可以使用sqlserver数据库代替)
                        string address = string.Format(@"{0}\{1}", Helper.ServerFolderPath, file.Name);
                        //File.Create(address);
                        fileInfoIO.CopyTo(address, true);
                        LoadUpLoadFile();
                        e.Result = true;
                    }                // 启用上传按钮
                    if (this.btnUpload.InvokeRequired)
                    {
                        this.btnUpload.Invoke((ThreadStart)delegate
                        {
                            this.btnUpload.Enabled = true;
                        });
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    fs.Close();
                    client.Close();
                    client.Abort();
                }
    public CustomFileInfo UpLoadFileInfo(CustomFileInfo fileInfo)
            {
                // 获取服务器文件上传路径
                string fileUpLoadPath = System.Web.Hosting.HostingEnvironment.MapPath("~/UpLoadFile/");
                // 如需指定新的文件夹,需要进行创建操作。
                Console.WriteLine("1");
                // 创建FileStream对象
                FileStream fs = new FileStream(fileUpLoadPath + fileInfo.Name, FileMode.OpenOrCreate);
                Console.WriteLine("2");            long offSet = fileInfo.OffSet;
                // 使用提供的流创建BinaryWriter对象
                var binaryWriter = new BinaryWriter(fs, Encoding.UTF8);            binaryWriter.Seek((int)offSet, SeekOrigin.Begin);
                binaryWriter.Write(fileInfo.SendByte);
                fileInfo.OffSet = fs.Length;
                fileInfo.SendByte = null;            binaryWriter.Close();
                fs.Close();
                Console.WriteLine("2");
                return fileInfo;
            }我使用的wcf上传文件。
      

  8.   

    能把整体的源代码发给我参考一下吗?
    cs可以向服务器上传2g的算吗??void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                // 要上传的文件地址
                FileStream fs = File.OpenRead(fileInfoIO.FullName);
                // 实例化服务客户的
                ServiceFileClient client = new ServiceFileClient();
                try
                {
                    string path = e.Argument.ToString();
                    int maxSiz = 1024 * 100;
                    System.IO.FileInfo fileInfoIO = new System.IO.FileInfo(path);                // 根据文件名获取服务器上的文件                CustomFileInfo file = client.GetFileInfo(fileInfoIO.Name);                if (file == null)
                    {
                        file = new CustomFileInfo();
                        file.OffSet = 0;
                    }
                    file.Name = fileInfoIO.Name;
                    file.Length = fs.Length;                if (file.Length == file.OffSet) //如果文件的长度等于文件的偏移量,说明文件已经上传完成
                    {
                        MessageBox.Show("该文件已存在");
                        e.Result = false;   // 设置异步操作结果为false
                    }
                    else
                    {
                        while (file.Length != file.OffSet)
                        {
                            file.SendByte = new byte[file.Length - file.OffSet <= maxSiz ? file.Length - file.OffSet : maxSiz]; //设置传递的数据的大小                        fs.Position = file.OffSet; //设置本地文件数据的读取位置
                            fs.Read(file.SendByte, 0, file.SendByte.Length);//把数据写入到file.Data中
                            file = client.UpLoadFileInfo(file); //上传
                            //int percent = (int)((double)file.OffSet / (double)((long)file.Length)) * 100;
                            int percent = (int)(((double)file.OffSet / (double)((long)file.Length)) * 100);
                            (sender as BackgroundWorker).ReportProgress(percent);
                        }
                        // 移动文件到临时目录(此部分创建可以使用sqlserver数据库代替)
                        string address = string.Format(@"{0}\{1}", Helper.ServerFolderPath, file.Name);
                        //File.Create(address);
                        fileInfoIO.CopyTo(address, true);
                        LoadUpLoadFile();
                        e.Result = true;
                    }                // 启用上传按钮
                    if (this.btnUpload.InvokeRequired)
                    {
                        this.btnUpload.Invoke((ThreadStart)delegate
                        {
                            this.btnUpload.Enabled = true;
                        });
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    fs.Close();
                    client.Close();
                    client.Abort();
                }
    public CustomFileInfo UpLoadFileInfo(CustomFileInfo fileInfo)
            {
                // 获取服务器文件上传路径
                string fileUpLoadPath = System.Web.Hosting.HostingEnvironment.MapPath("~/UpLoadFile/");
                // 如需指定新的文件夹,需要进行创建操作。
                Console.WriteLine("1");
                // 创建FileStream对象
                FileStream fs = new FileStream(fileUpLoadPath + fileInfo.Name, FileMode.OpenOrCreate);
                Console.WriteLine("2");            long offSet = fileInfo.OffSet;
                // 使用提供的流创建BinaryWriter对象
                var binaryWriter = new BinaryWriter(fs, Encoding.UTF8);            binaryWriter.Seek((int)offSet, SeekOrigin.Begin);
                binaryWriter.Write(fileInfo.SendByte);
                fileInfo.OffSet = fs.Length;
                fileInfo.SendByte = null;            binaryWriter.Close();
                fs.Close();
                Console.WriteLine("2");
                return fileInfo;
            }我使用的wcf上传文件。
      

  9.   

    cs可以向服务器上传2g的算吗??void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                // 要上传的文件地址
                FileStream fs = File.OpenRead(fileInfoIO.FullName);
                // 实例化服务客户的
                ServiceFileClient client = new ServiceFileClient();
                try
                {
                    string path = e.Argument.ToString();
                    int maxSiz = 1024 * 100;
                    System.IO.FileInfo fileInfoIO = new System.IO.FileInfo(path);                // 根据文件名获取服务器上的文件                CustomFileInfo file = client.GetFileInfo(fileInfoIO.Name);                if (file == null)
                    {
                        file = new CustomFileInfo();
                        file.OffSet = 0;
                    }
                    file.Name = fileInfoIO.Name;
                    file.Length = fs.Length;                if (file.Length == file.OffSet) //如果文件的长度等于文件的偏移量,说明文件已经上传完成
                    {
                        MessageBox.Show("该文件已存在");
                        e.Result = false;   // 设置异步操作结果为false
                    }
                    else
                    {
                        while (file.Length != file.OffSet)
                        {
                            file.SendByte = new byte[file.Length - file.OffSet <= maxSiz ? file.Length - file.OffSet : maxSiz]; //设置传递的数据的大小                        fs.Position = file.OffSet; //设置本地文件数据的读取位置
                            fs.Read(file.SendByte, 0, file.SendByte.Length);//把数据写入到file.Data中
                            file = client.UpLoadFileInfo(file); //上传
                            //int percent = (int)((double)file.OffSet / (double)((long)file.Length)) * 100;
                            int percent = (int)(((double)file.OffSet / (double)((long)file.Length)) * 100);
                            (sender as BackgroundWorker).ReportProgress(percent);
                        }
                        // 移动文件到临时目录(此部分创建可以使用sqlserver数据库代替)
                        string address = string.Format(@"{0}\{1}", Helper.ServerFolderPath, file.Name);
                        //File.Create(address);
                        fileInfoIO.CopyTo(address, true);
                        LoadUpLoadFile();
                        e.Result = true;
                    }                // 启用上传按钮
                    if (this.btnUpload.InvokeRequired)
                    {
                        this.btnUpload.Invoke((ThreadStart)delegate
                        {
                            this.btnUpload.Enabled = true;
                        });
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    fs.Close();
                    client.Close();
                    client.Abort();
                }
    public CustomFileInfo UpLoadFileInfo(CustomFileInfo fileInfo)
            {
                // 获取服务器文件上传路径
                string fileUpLoadPath = System.Web.Hosting.HostingEnvironment.MapPath("~/UpLoadFile/");
                // 如需指定新的文件夹,需要进行创建操作。
                Console.WriteLine("1");
                // 创建FileStream对象
                FileStream fs = new FileStream(fileUpLoadPath + fileInfo.Name, FileMode.OpenOrCreate);
                Console.WriteLine("2");            long offSet = fileInfo.OffSet;
                // 使用提供的流创建BinaryWriter对象
                var binaryWriter = new BinaryWriter(fs, Encoding.UTF8);            binaryWriter.Seek((int)offSet, SeekOrigin.Begin);
                binaryWriter.Write(fileInfo.SendByte);
                fileInfo.OffSet = fs.Length;
                fileInfo.SendByte = null;            binaryWriter.Close();
                fs.Close();
                Console.WriteLine("2");
                return fileInfo;
            }我使用的wcf上传文件。
    发你qq邮箱里吧
      

  10.   

    谢谢。我的QQ邮箱:[email protected]可以向服务器上传2g的算吗??void worker_DoWork(object sender, DoWorkEventArgs e)
            {
                // 要上传的文件地址
                FileStream fs = File.OpenRead(fileInfoIO.FullName);
                // 实例化服务客户的
                ServiceFileClient client = new ServiceFileClient();
                try
                {
                    string path = e.Argument.ToString();
                    int maxSiz = 1024 * 100;
                    System.IO.FileInfo fileInfoIO = new System.IO.FileInfo(path);                // 根据文件名获取服务器上的文件                CustomFileInfo file = client.GetFileInfo(fileInfoIO.Name);                if (file == null)
                    {
                        file = new CustomFileInfo();
                        file.OffSet = 0;
                    }
                    file.Name = fileInfoIO.Name;
                    file.Length = fs.Length;                if (file.Length == file.OffSet) //如果文件的长度等于文件的偏移量,说明文件已经上传完成
                    {
                        MessageBox.Show("该文件已存在");
                        e.Result = false;   // 设置异步操作结果为false
                    }
                    else
                    {
                        while (file.Length != file.OffSet)
                        {
                            file.SendByte = new byte[file.Length - file.OffSet <= maxSiz ? file.Length - file.OffSet : maxSiz]; //设置传递的数据的大小                        fs.Position = file.OffSet; //设置本地文件数据的读取位置
                            fs.Read(file.SendByte, 0, file.SendByte.Length);//把数据写入到file.Data中
                            file = client.UpLoadFileInfo(file); //上传
                            //int percent = (int)((double)file.OffSet / (double)((long)file.Length)) * 100;
                            int percent = (int)(((double)file.OffSet / (double)((long)file.Length)) * 100);
                            (sender as BackgroundWorker).ReportProgress(percent);
                        }
                        // 移动文件到临时目录(此部分创建可以使用sqlserver数据库代替)
                        string address = string.Format(@"{0}\{1}", Helper.ServerFolderPath, file.Name);
                        //File.Create(address);
                        fileInfoIO.CopyTo(address, true);
                        LoadUpLoadFile();
                        e.Result = true;
                    }                // 启用上传按钮
                    if (this.btnUpload.InvokeRequired)
                    {
                        this.btnUpload.Invoke((ThreadStart)delegate
                        {
                            this.btnUpload.Enabled = true;
                        });
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    fs.Close();
                    client.Close();
                    client.Abort();
                }
    public CustomFileInfo UpLoadFileInfo(CustomFileInfo fileInfo)
            {
                // 获取服务器文件上传路径
                string fileUpLoadPath = System.Web.Hosting.HostingEnvironment.MapPath("~/UpLoadFile/");
                // 如需指定新的文件夹,需要进行创建操作。
                Console.WriteLine("1");
                // 创建FileStream对象
                FileStream fs = new FileStream(fileUpLoadPath + fileInfo.Name, FileMode.OpenOrCreate);
                Console.WriteLine("2");            long offSet = fileInfo.OffSet;
                // 使用提供的流创建BinaryWriter对象
                var binaryWriter = new BinaryWriter(fs, Encoding.UTF8);            binaryWriter.Seek((int)offSet, SeekOrigin.Begin);
                binaryWriter.Write(fileInfo.SendByte);
                fileInfo.OffSet = fs.Length;
                fileInfo.SendByte = null;            binaryWriter.Close();
                fs.Close();
                Console.WriteLine("2");
                return fileInfo;
            }我使用的wcf上传文件。
    发你qq邮箱里吧