RT 求解···

解决方案 »

  1.   

    <!--  通过 <httpRuntime> 节可以配置 ASP.NET 使用的
     上传文件的上传时间,从而实现超大文件上传。
     -->
            
    <httpRuntime executionTimeout="36000" maxRequestLength="951200" useFullyQualifiedRedirectUrl="true" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />在Web.config的system.web这里加上面这句
      

  2.   

    <!--
                  通过 <httpRuntime> 节可以配置 ASP.NET 使用的
                  上传文件的上传时间,从而实现超大文件上传。
            -->
            <httpRuntime executionTimeout="36000" maxRequestLength="951200" useFullyQualifiedRedirectUrl="true" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100" enableVersionHeader="true" />在Web.config的system.web这里加上面这句
      

  3.   

    我没试过 用sliverlight可以么?
    http://www.51aspx.com/CV/SilverlightMultiFileUploader/
      

  4.   

    activex 拆分上传
    否则就别指望了,正常上传都是保存到服务器内存中,可想而知,服务器受得了嘛
      

  5.   

    upupupupupupupupupupupupupupupupupupupupupupupupup
      

  6.   

    上传可以在web。config进行相应的配置
    下载可以分多块读取,
      

  7.   

    超大是多大,如果太大的话,可以考虑用ftp的方式来做。
      

  8.   

    参考内容:http://www.cnblogs.com/stg609/archive/2008/07/26/1252231.html
    http://www.it503.com/asp.net/asp.netchangjianwenti/13902_1.html
      

  9.   

    大文件您可以使用C#的套接字和FTP开发的IP端口连接,然后使用命令去上传文件
    因为使用HTTP协议上传大文件是很慢而且常常超时!
      

  10.   


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net.Sockets;
    using System.Net;
    using System.IO;namespace LHC.Core
    {
        public class FTPClient
        {
            #region///内部变量
            /// <summary>
            /// 服务器返回的应答信息(包含应答码)
            /// </summary>
            private string strMsg;
            /// <summary>
            /// 服务器返回的应答信息(包含应答码)
            /// </summary>
            private string strReply;
            /// <summary>
            /// 服务器返回的应答码
            /// </summary>
            private int iReplyCode;
            /// <summary>
            /// 进行控制连接的socket
            /// </summary>
            private Socket socketControl;
            /// <summary>
            /// 传输模式
            /// </summary>
            private TransferType trType;
            /// <summary>
            /// 接收和发送数据的缓冲区
            /// </summary>
            private static int BLOCK_SIZE = 512;
            Byte[] buffer = new Byte[BLOCK_SIZE];
            /// <summary>
            /// 编码方式
            /// </summary>
            Encoding ASCII = Encoding.ASCII;
            #endregion        #region ///字段GET/SET访问器
            /// <summary>
            /// FTP服务器IP地址
            /// </summary>
            private string strRemoteHost;
            public string RemoteHost
            {
                get
                {
                    return strRemoteHost;
                }
                set
                {
                    strRemoteHost = value;
                }
            }
            /// <summary>
            /// FTP服务器端口
            /// </summary>
            private int strRemotePort;
            public int RemotePort
            {
                get
                {
                    return strRemotePort;
                }
                set
                {
                    strRemotePort = value;
                }
            }
            /// <summary>
            /// 当前服务器目录
            /// </summary>
            private string strRemotePath;
            public string RemotePath
            {
                get
                {
                    return strRemotePath;
                }
                set
                {
                    strRemotePath = value;
                }
            }
            /// <summary>
            /// 登录用户账号
            /// </summary>
            private string strRemoteUser;
            public string RemoteUser
            {
                set
                {
                    strRemoteUser = value;
                }
            }
            /// <summary>
            /// 用户登录密码
            /// </summary>
            private string strRemotePass;
            public string RemotePass
            {
                set
                {
                    strRemotePass = value;
                }
            } /// <summary>
            /// 是否登录
            /// </summary>
            private Boolean bConnected;
            public bool Connected
            {
                get
                {
                    return bConnected;
                }
            }
            #endregion
            
            #region ///构造函数
         
            /// <summary>
            /// 默认构造函数
            /// </summary>
            public FTPClient()
            {
                // FTP服务IP地址
                strRemoteHost = "";
                // 当前服务器路径
                strRemotePath = "";
                // 用户登陆账号
                strRemoteUser = "";
                // 用户登陆密码
                strRemotePass = "";
                // FTP服务端口
                strRemotePort = 21;
                // 是否登陆
                bConnected = false;
            }
            
            
            /// <summary>
            /// 有参构造函数
            /// </summary>
            /// <param name="remoteHost">FTP服务IP地址</param>
            /// <param name="remotePath">当前服务器路径</param>
            /// <param name="remoteUser">用户登陆账号</param>
            /// <param name="remotePass">用户登陆密码</param>
            /// <param name="remotePort">FTP服务端口</param>
            public FTPClient(string remoteHost, string remotePath, string remoteUser, string remotePass, int remotePort)
            {
                // 初始化
                strRemoteHost = remoteHost;
                strRemotePath = remotePath;
                strRemoteUser = remoteUser;
                strRemotePass = remotePass;
                strRemotePort = remotePort;
                // 建立连接
                Connect();
            }
            #endregion        #region///建立服务器连接,和关闭连接        /// <summary>
            /// 建立连接 
            /// </summary>
            public void Connect()
            {
              
                // 建立套接字
                socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                // IP/端口映射类
                IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort);
                
                // 开始链接
                try
                {
                    // 连接到指定IP/端口(网络地址)
                    socketControl.Connect(ep);
                }
                catch (Exception)
                {
                    throw new IOException("无法连接到终端服务,请检查IP地址或端口是否正确");
                }   
                
                // 发送命令,FTP服务器获取返回数据
                ReadReply();            #region /////////////////////////// 处理返回数据信息 ///////////////////////////
               
                // 返回答应码不为220(连接成功),则抛出异常
                if (iReplyCode != 220) 
                {
                    // 关闭连接
                    DisConnect();
                    // 抛出异常
                    throw new IOException(strReply.Substring(4));
                }  
                
                
                // 开始进入FTP登陆....
                SendCommand("USER " + strRemoteUser);
                // 检查用户正确性
                if (!(iReplyCode == 331 || iReplyCode == 230))
                {
                    CloseSocketConnect();//关闭连接
                    throw new IOException(strReply.Substring(4));
                }
                // 检查密码正确性
                if (iReplyCode != 230)
                {
                    SendCommand("PASS " + strRemotePass);
                    if (!(iReplyCode == 230 || iReplyCode == 202))
                    {
                        CloseSocketConnect();//关闭连接
                        throw new IOException(strReply.Substring(4));
                    }
                }            // 设置为可登陆
                bConnected = true;               // 切换到指定目录
                ChDir(strRemotePath);            #endregion
            }
            /// <summary>
            /// 关闭连接
            /// </summary>
            public void DisConnect()
            {
                if (socketControl != null)
                {
                    SendCommand("QUIT");
                }
                CloseSocketConnect();
            }
            #endregion
      
            #region /////////////////////////// 目录操作方法 ///////////////////////////
            /// <summary>
            /// 却换目录
            /// </summary>
            /// <param name="strDirName">指定切换的目录</param>
            public void ChDir(string strDirName)
            {
                // 检查参数合法性
                if (strDirName.Equals(".") || strDirName.Equals(""))
                {
                    return;
                }
                // 检查是否可连接
                if (!bConnected)
                {
                    // 末连接,进行连接
                    Connect();
                }
                // 发送命令 CWD(却换到指定目录DOS命令)
                SendCommand("CWD " + strDirName);
                // 操作失败
                if (iReplyCode != 250)
                {
                    //抛出异常
                    throw new IOException(strReply.Substring(4));
                }
                // 指定当前目录
                this.strRemotePath = strDirName;
            }
            /// <summary>
            /// 获得文件列表
            /// </summary>
            /// <param name="strMask">文件名的匹配字符串</param>
            /// <returns>返回文件列表</returns>
            public string[] Dir(string strMask)
            {
                // 判断是否连接
                if (!bConnected)
                {
                    // 末连接,进行连接
                    Connect();
                }   //建立进行数据连接的socket
                Socket socketData = CreateDataSocket();            //传送命令
                SendCommand("NLST " + strMask);   //分析应答代码
                if (!(iReplyCode == 150 || iReplyCode == 125 || iReplyCode == 226))
                {
                    throw new IOException(strReply.Substring(4));
                }   //获得结果
                strMsg = "";
                while (true)
                {
                    int iBytes = socketData.Receive(buffer, buffer.Length, 0);
                    strMsg += ASCII.GetString(buffer, 0, iBytes);
                    if (iBytes < buffer.Length)
                    {
                        break;
                    }
                }
                char[] seperator = { '\n' };
                string[] strsFileList = strMsg.Split(seperator);
                socketData.Close();//数据socket关闭时也会有返回码
                if (iReplyCode != 226)
                {
                    ReadReply();
                    if (iReplyCode != 226)
                    {
                        throw new IOException(strReply.Substring(4));
                    }
                }
                return strsFileList;
            }
      

  11.   

            #endregion
            #region /////////////////////////// 文件操作方法 ///////////////////////////
            
            /// <summary>
            /// 获取文件大小
            /// </summary>
            /// <param name="strFileName">文件路径名</param>
            /// <returns>文件大小</returns>
            private long GetFileSize(string strFileName)
            {
                //检查是否存在连接
                if (!bConnected)
                {
                    //不存在,建立连接
                    Connect();
                }            // 发送处理请求
                SendCommand("SIZE " + Path.GetFileName(strFileName));            // 处理结果
                long lSize = 0;
                if (iReplyCode == 213)
                {
                    lSize = Int64.Parse(strReply.Substring(4));
                }
                else
                {
                    throw new IOException(strReply.Substring(4));
                }
                return lSize;
            }        /// <summary>
            /// 删除
            /// </summary>
            /// <param name="strFileName">待删除文件名</param>
            public void Delete(string strFileName)
            {
                // 检查是否存在连接
                if (!bConnected)
                {   
                    //不存在,建立连接
                    Connect();
                }
                // 发送处理请求
                SendCommand("DELE " + strFileName);            // 处理结果
                if (iReplyCode != 250)
                {
                    throw new IOException(strReply.Substring(4));
                }
            }
            #endregion
            #region /////////////////////////// 辅助方法 ///////////////////////////        /// <summary>
            /// 返回FTP返回的应答码
            /// </summary>
            private void ReadReply()
            {
                strMsg = "";
                strReply = ReadLine();
                iReplyCode = Int32.Parse(strReply.Substring(0, 3));
            }        /// <summary>
            /// 发送命令并获取应答码和最后一行应答字符串
            /// </summary>
            /// <param name="strCommand">命令</param>
            private void SendCommand(String strCommand)
            {
                 
                // 转换数据类型
                byte[] cmdBytes = Encoding.GetEncoding("gb2312").GetBytes((strCommand + "\r\n").ToCharArray());
                // 发送命令
                socketControl.Send(cmdBytes, cmdBytes.Length, 0);
                // 调用应答码处理方法
                ReadReply();
            }        /// <summary>
            /// 关闭socket连接(用于登录以前)
            /// </summary>
            private void CloseSocketConnect()
            {
                if (socketControl != null)
                {
                    socketControl.Close();
                    socketControl = null;
                }
                bConnected = false;
            }
            /// <summary>
            /// 传输模式:二进制类型、ASCII类型
            /// </summary>
            public enum TransferType { Binary, ASCII };
            /// <summary>
            /// 设置传输模式
            /// </summary>
            /// <param name="ttType">传输模式</param>
            public void SetTransferType(TransferType ttType)
            {
                if (ttType == TransferType.Binary)
                {
                    SendCommand("TYPE I");//binary类型传输
                }
                else
                {
                    SendCommand("TYPE A");//ASCII类型传输
                }
                if (iReplyCode != 200)
                {
                    throw new IOException(strReply.Substring(4));
                }
                else
                {
                    trType = ttType;
                }
            }
            /// <summary>
            /// 获得传输模式
            /// </summary>
            /// <returns>传输模式</returns>
            public TransferType GetTransferType()
            {
                return trType;
            }
             
            #endregion
     
            #region 文件操作
           
          
          
            /// <summary>
            /// 重命名(如果新文件名与已有文件重名,将覆盖已有文件)
            /// </summary>
            /// <param name="strOldFileName">旧文件名</param>
            /// <param name="strNewFileName">新文件名</param>
            public void Rename(string strOldFileName, string strNewFileName)
            {
                if (!bConnected)
                {
                    Connect();
                }
                SendCommand("RNFR " + strOldFileName);
                if (iReplyCode != 350)
                {
                    throw new IOException(strReply.Substring(4));
                }
                // 如果新文件名与原有文件重名,将覆盖原有文件
                SendCommand("RNTO " + strNewFileName);
                if (iReplyCode != 250)
                {
                    throw new IOException(strReply.Substring(4));
                }
            }
            #endregion
            #region 上传和下载
            /// <summary>
            /// 下载一批文件
            /// </summary>
            /// <param name="strFileNameMask">文件名的匹配字符串</param>
            /// <param name="strFolder">本地目录(不得以\结束)</param>
            public void Get(string strFileNameMask, string strFolder)
            {
                if (!bConnected)
                {
                    Connect();
                }
                string[] strFiles = Dir(strFileNameMask);
                foreach (string strFile in strFiles)
              
      

  12.   

    设置<httpRuntime maxRequestLength="51200" executionTimeout="3600" appRequestQueueLimit="10000"/> 
     
    断点续传
    用HttpWorkerRequest,GetPreloadedEntityBody 和 ReadEntityBody方法从IIS为ASP.NET建立的pipe里分块读取数据
      

  13.   

    那个编辑器不够大··发送不了FTP的操作
      

  14.   

    在ASP.NET中处理大文件上传 
    参考   博客园信息
    http://www.cnblogs.com/zk09/archive/2010/04/14/1711818.html
      

  15.   

    如果文件很大的话,还是要用别人提供的上传组件,若文件太大的话,设置web.config也没作用,或者自己可以写段代码将文件分割上传
      

  16.   

    多线程。。上传 下载using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Threading;namespace SeptWolves.Comm
    {
        //文件多线程上传类
        public class ThreadFileUp
        {
            //临时文件大小数组
            private int[] filesizew;
            //临时文件名
            private string[] filenamew;
            //临时文件上传状态
            private bool[] threadw;
            //临时文件起点位置
            private int[] filestartw;
            //线程数
            private int thread;
            //愿文件读取流
            private FileStream fsread = null;
            //保存文件路径
            private string NewFilePath;
            //临时文件存放路径
            private string TempSavePath;        /// <summary>
            /// 多线程上传文件
            /// </summary>
            /// <param name="FileUpPath">上传文件全路径</param>
            /// <param name="SavePath">保存文件路径(不包括后缀名)</param>
            /// <param name="TempPath">保存临时文件的路径</param>
            /// <param name="threadnum">线程数</param>
            /// <returns>返回:结果集</returns>
            public SeptWolves.Comm.FileUpImg FileUpLoad(string FileUpPath, string SavePath, string TempPath, int threadnum)
            {
                string name = DateTime.Now.ToString("yyyyMMddHHmmssmsus");
                NewFilePath = SavePath + "." + FileUpPath.Split('.')[FileUpPath.Split('.').Length - 1];
                thread = threadnum;
                TempSavePath = TempPath;            FileUpImg result = new FileUpImg();
                result.Flag = false;
                if (!File.Exists(FileUpPath))
                {
                    result.Result = "上传不存在!";
                    return result;
                }            //文件大小
                long filesize = 0;
                FileInfo file = new FileInfo(FileUpPath);
                filesize = file.Length; //获取文件大小            //初始化数组
                threadw = new bool[thread];
                filesizew = new int[thread];
                filestartw = new int[thread];
                filenamew = new string[thread];            //计算每个线程的平均接受文件大小
                int filethread = ((int)filesize / thread) - 1;  //平均分配
                int filethreade = ((int)filesize % thread)-1;  //剩余全部            //数组赋值
                for (int i = 0; i < thread; i++)
                {
                    threadw[i] = false;  //每个线程状态的初始值为假
                    filenamew[i] = name + "_" + i + ".dat";  //每个临时文件的文件名
                    filestartw[i] = filethread * i;  //每个临时文件的起点
                    filesizew[i] = filethread;  //每个临时文件的大小
                }            filesizew[thread - 1] += filethreade;  //最后一个临时文件大小+剩余部分            //读取原文件流
                fsread = new FileStream(FileUpPath, FileMode.Open);            //启用上传线程
                for (int i = 0; i < thread; i++)
                {
                    Thread thraed = new Thread(new ParameterizedThreadStart(receive));
                    thraed.Start(i);
                }            //合并
                string hbresult = hbfile();
                if (hbresult != "")
                {
                    result.Result = hbresult;
                    return result;
                }
                //关闭读取流
                fsread.Close();            result.Flag = true;
                result.Name = NewFilePath.Split('/')[NewFilePath.Split('/').Length-1];
                result.Result = "上传成功!";
                return result;
            }        // <summary>
            ///  线程调的方法 (上传文件)
            /// </summary>
            private void receive(object j)
            {
                int i = (int)j;
                //文件名
                string filename = filenamew[i];            FileStream fs = null;            try
                {
                    fs = new FileStream(TempSavePath + filename, FileMode.Create);
                    //根据文件名称和文件打开模式来初始化FileStream文件流实例
                    BinaryWriter TempWriter = new BinaryWriter(fs);
                    fsread.Position = filestartw[i];
                    //以文件的全路对应的字符串和文件打开模式来初始化FileStream文件流实例
                    BinaryReader SplitFileReader = new BinaryReader(fsread);
                    byte[] TempBytes = SplitFileReader.ReadBytes((int)filesizew[i]);
                    //从大文件中读取指定大小数据
                    TempWriter.Write(TempBytes);
                    //把此数据写入小文件
                    TempWriter.Close();
                    fs.Close();
                    threadw[i] = true;
                }
                catch (Exception ex)
                {
                    if (fs != null)
                    {
                        fs.Close();
                    }
                }
               
            }        /// <summary>
            /// 合并文件
            /// </summary>
            private string hbfile()
            {
                bool hb;
                //等待线程全部结束
                while (true)
                {
                    hb = true;
                    for (int i = 0; i < thread; i++)
                    {
                        if (threadw[i] == false)//有未结束线程,等待
                        {
                            hb = false;
                            Thread.Sleep(100);
                            break;
                        }
                    }
                    if (hb == true)//所有线程均已结束,停止等待,
                    {
                        break;
                    }
                }            byte[] bytes = new byte[512];            try
                {
                    FileStream AddStream = new FileStream(NewFilePath, FileMode.Create);
                    //以合并后的文件名称和打开方式来创建、初始化FileStream文件流
                    BinaryWriter AddWriter = new BinaryWriter(AddStream);
                    //以FileStream文件流来初始化BinaryWriter书写器,此用以合并分割的文件
                    for (int i = 0; i < thread; i++)
                    {
                        FileStream TempStream = new FileStream(TempSavePath + filenamew[i], FileMode.Open);
                        //以小文件所对应的文件名称和打开模式来初始化FileStream文件流,起读取分割作用
                        BinaryReader TempReader = new BinaryReader(TempStream);
                        //用FileStream文件流来初始化BinaryReader文件阅读器,也起读取分割文件作用
                        AddWriter.Write(TempReader.ReadBytes((int)TempStream.Length));
                        //读取分割文件中的数据,并生成合并后文件
                        TempReader.Close();
                        //关闭BinaryReader文件阅读器
                        TempStream.Close();
                    }                AddStream.Close();                for (int i = 0; i < thread; i++)
                    {
                        System.IO.File.Delete(TempSavePath + filenamew[i]);
                    }
                }
                catch (Exception ex)
                {
                    return "合并文件失败!";
                }
                return "";
            }
        }
    }
      

  17.   

    这不就等于把ftp软件重写一遍啦!
      

  18.   

    用控件吧,在Web.config的system.web配置是不行的,内存占用太大,可能会死掉.
    去我空间下载吧,有现成的例子,还支持多种风格,够你使用了.
      

  19.   

    http://download.csdn.net/source/2241772
      

  20.   

    ftp上传,还有看看jquery是不是有这样上传大文件的插件。
      

  21.   

    路过,关注,,,,,,顶顶顶、、、、、、、、、、、UPUPUP,,,,,,,,↑↑↑
      

  22.   

    试试StorageWebPlug上传插件。
    新颖网络上传插件(StorageWebPlug)是一个支持超大文件(2GB,可扩展)上传的COM控件, 具备断点续传,文件MD5验证,有详细的上传进度显示,支持多种脚本语言。免费提供JavaScript SDK包。
    官方网站:http://www.ncmem.com
    产品介绍:http://www.ncmem.com/webplug/features/index.aspx
    下载地址:http://www.ncmem.com/download.aspx产品截图:
    截图-上传:截图-已上传:
      

  23.   

    建议用第三方组件,如Power-Web,AspUpload,ActiveFile,ABCUpload,aspSmartUpload,SA-FileUp
      

  24.   


    这个就可以,executionTimeout改大点,maxRequestLength最大2097151