200求上传大文件问题,二种方式,实现其中一种即可。
现在要实现上传100M大的文件。
方法一,用VS2008自带控件,FileUpload,在web.confing设置。
<httpRuntime executionTimeout="3600" maxRequestLength="819000" />
也试过设置成这样
<httpRuntime executionTimeout="3600" maxRequestLength="819000" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100"/>
还是不行,常有两种状态:一个是找不到服务器,一个是上传上传就显示空白页。
方法二,就是提供免费的上传控件来用用。
要求:配置简单(像swfupdaae这类,难用,的就免谈了。。。)
给分要求:
50分是散发。
150分,专给一个采用的提供方法人。
最后,多谢大家,事因,实在急,也搞了很久,因无办法,多谢。
[解决办法]
需要修改的地方
上载大文件时,可使用 元素的 maxRequestLength 属性来增加文件大小的最大允许值,例如:
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
</system.web>
</configuration>
其中:maxRequestLength:指示 ASP.NET 支持的HTTP方式上载的最大字节数。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。executionTimeout:指示在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。在当文件超出指定的大小时,如果浏览器中会产生 DNS 错误或者出现服务不可得到的情况,也请修改以上的配置,把配置数加大。
另外,上载大文件时,还可能会收到以下错误信息:
aspnet_wp.exe (PID: 1520) 被回收,因为内存消耗超过了 460 MB(可用 RAM 的百分之 60)。
如果遇到此错误信息,请增加应用程序的 Web.config 文件的 元素中 memoryLimit 属性的值。例如:
<configuration>
<system.web>
<processModel memoryLimit="80"/>
</system.web>
</configuration>
[解决办法]
试试 这几个
分卷压缩后 小文件分多次上传
http://www.open-open.com/ajax/Upload.htm
[解决办法]
你还要考虑脚本超时啊。网络传输100M需要很长时间的
Server.ScriptTimeout = 99999;
[解决办法]
直接用ftp上传
public void Upload()
{
if (FileUpload1.HasFile)
{
string fileName = FileUpload1.FileName;
string path = "ftp://localhost/" + fileName;
FtpWebRequest ftpWebRequest = FtpWebRequest.Create(path) as FtpWebRequest;
ftpWebRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpWebRequest.Credentials = new NetworkCredential("UserName", "Password");
using (Stream stream = ftpWebRequest.GetRequestStream())
{
byte[] data= FileUpload1.FileBytes;
stream.Write(data, 0, data.Length);
}
}
}
QQ群:59557329 .NET技术开发联盟
希望大家可以踊跃参加,积极讨论
[解决办法]
给个建议给你,考虑用二进制上传看看。
[解决办法]
protected void Page_Load(object sender, EventArgs e)
{
Server.ScriptTimeout = 3600;
}
[解决办法]
上传100M
大文件使用ftpwebrequest,断点续传
大文件上传使用ftp或用组件如neatupload、SWFUload ,分块上传
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
</system.web>
</configuration>
其中:maxRequestLength:指示 ASP.NET 支持的HTTP方式上载的最大字节数。该限制可用于防止因用户将大量文件传递到该服务器而导致的拒绝服务攻击。指定的大小以 KB 为单位。默认值为 4096 KB (4 MB)。executionTimeout:指示在被 ASP.NET 自动关闭前,允许执行请求的最大秒数。在当文件超出指定的大小时,如果浏览器中会产生 DNS 错误或者出现服务不可得到的情况,也请修改以上的配置,把配置数加大。
增加应用程序的 Web.config 文件的 元素中 memoryLimit 属性的值。
<configuration>
<system.web>
<processModel memoryLimit="80"/>
</system.web>
</configuration>
上传组件
[解决办法]
http://krystalware.com/blog/archive/2004/02/04/181.aspx
去看看这个吧
[解决办法]
肯定是代码问题 ., 30M是肯定行的 . 检查看上传的服务器的路径正确否 ??
我用ExtUpload组件上传 单个文件1.64G上传至服务器ok的. 多文件上传共有4.65G.
额 ,FTP上传的话也不错.貌似有个类专门是FTP上传类的吧.
FTP的话, 你需要有FTP服务器. 网上有很多下载.
- C# code
public class ftp{ public ftp() { // //TODO: 在此处添加构造函数逻辑 // } // FTP 配置信息 static string ftpServerIP = "192.168.0.1";//这里放ftp地址 static string ftpUserID = "test";//这里放用户名 static string ftpPassword = "111";//这里放密码 public static string uri = ""; public static bool UploadFile(string filename) { FileInfo fileInf = new FileInfo(filename); //月份 string monthstr = ""; if (DateTime.Now.Month < 10) { monthstr = "0" + DateTime.Now.Month.ToString(); } else { monthstr = DateTime.Now.Month.ToString(); } //天数(这应该是看一天上传可多少文件) string daystr = ""; if (DateTime.Now.Day < 10) { daystr = "0" + DateTime.Now.Day.ToString(); } else { daystr = DateTime.Now.Day.ToString(); } //文件夹名称按月份+天数命名 string datastr = DateTime.Now.Date.Year + monthstr + daystr; MakeDir(datastr); uri = "ftp://" + ftpServerIP + "/" + datastr + "/" + fileInf.Name; FtpWebRequest reqFTP; // 根据uri创建FtpWebRequest对象 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + datastr + "/" + fileInf.Name)); // ftp用户名和密码 reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); // 默认为true,连接不会被关闭 // 在一个命令之后被执行 reqFTP.KeepAlive = false; // 指定执行什么命令 reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定数据传输类型 reqFTP.UseBinary = true; // 上传文件时通知服务器文件的大小 reqFTP.ContentLength = fileInf.Length; // 缓冲大小设置为2kb int buffLength = 2048; byte[] buff = new byte[buffLength]; int contentLen; // 打开一个文件流 (System.IO.FileStream) 去读上传的文件 FileStream fs = fileInf.OpenRead(); try { // 把上传的文件写入流 Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的2kb contentLen = fs.Read(buff, 0, buffLength); // 流内容没有结束 while (contentLen != 0) { // 把内容从file stream 写入 upload stream strm.Write(buff, 0, contentLen); contentLen = fs.Read(buff, 0, buffLength); } // 关闭两个流 strm.Close(); fs.Close(); return true; } catch (Exception ex) { // MessageBox.Show(ex.Message, "Upload Error"); HttpContext.Current.Response.Write("Upload Error:" + ex.Message); } return false; } /// <summary> /// 创建文件夹I /// </summary> /// <param name="dirName"></param>I private static void MakeDir(string dirName) { FtpWebRequest reqFTP; try { // dirName = name of the directory to create. reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + @"/" + dirName)); reqFTP.Method = WebRequestMethods.Ftp.MakeDirectory; reqFTP.UseBinary = true; reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword); FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse(); Stream ftpStream = response.GetResponseStream(); ftpStream.Close(); response.Close(); } catch (Exception ex) { } }}
[解决办法]
<configuration>
<system.web>
<httpRuntime maxRequestLength="1048576" executionTimeout="3600" />
</system.web>
</configuration>
http://www.open-open.com/ajax/Upload.htm
[解决办法]
用开源的NeatUpload组件可以轻松解决问题,超简单,看
http://www.marble2.net
[解决办法]
改下IIS_schema.xml里的相关设置,默认是3000000约30M
上传用jquery uploadify挺简单的,有进度条支持多上传,配置基本没有,自己写上传后的逻辑就完了
[解决办法]
不改IIS_schema的话web.config设置成多少也是没用
路径在\Windows\System32\inetsrv\config\schema下
[解决办法]
[解决办法]
很多上传空间,支持.NET
希望可以帮到楼主
[解决办法]
<td class="right">资料上传:</td>
<td style="height: 25px">
<asp:FileUpload ID="FileUpload1" runat="server" />(资料格式:rar,doc)
<asp:Button ID="BtnUploaf" runat="server" Text="上传" onclick="BtnUploaf_Click" />
<asp:Label ID="labFileName" runat="server" Visible="false" Text=""></asp:Label>
</td>
======================= 资料上传 =============================
protected void BtnUploaf_Click(object sender, EventArgs e)
{
if (FileUpload1.PostedFile != null)
{
HttpPostedFile hpf = this.FileUpload1.PostedFile;
string FileSize = Convert.ToString(Convert.ToInt32(hpf.ContentLength.ToString()) / 1024);// +"KB";
//取得文件名(不含路径)
char[] de = { '\\' };
string[] AFilename = hpf.FileName.Split(de);
string strFilename = AFilename[AFilename.Length - 1];
string flag = strFilename.Substring(strFilename.LastIndexOf('.') + 1);
ViewState["FileFlag"] = flag;//文件的后缀名
ViewState["FileSize"] = FileSize; //文件的大小
if (strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "rar" || strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "doc"
|| strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "RAR" || strFilename.Substring(strFilename.LastIndexOf('.') + 1) == "DOC")
{
hpf.SaveAs(Server.MapPath("/UploadBBSFile/" + strFilename));//上传至服务器 string dateStr = string.Format(DateTime.Now.ToString("yyyy") + @"\" + DateTime.Now.ToString("MM") + @"\" + DateTime.Now.ToString("dd") + @"\");
}
Session["FileName"] = strFilename; //资料名(原名)
this.labFileName.Text = strFilename;
ClientScript.RegisterStartupScript(this.GetType(), null, "<script>alert(\"资料上传成功!\");</script>");
return;
}
else
{
ClientScript.RegisterStartupScript(this.GetType(), null, "<script>alert(\"资料格式不正确!\");</script>");
return;
}
}
}