大文件上传就是以下几个问题1、最大问题就是服务器会把文件全部读到内存
2、要去web.config里设置超时时间
3、要去设置大小限制而2、3是全局设置,我们去修改会对其他程序造成影响,是不稳定 和 不安全的因素,
反而即使设置了2、3 而1的问题也不能解决。我在网上读了 Asp.NET大文件上传开发总结 1-6 ,也看了评论感觉问题不少,
经常出现404 连错误都抓不到。我在想能不能通过ISAPI来处理这个问题呢?在ISAPI的HttpExtensionProc过程中,将接受到的数据:1、取标识(“-----------------------------7d81e441d025c”)
2、根据标识判断数据段是否为文件,如果是就存如临时文件中
3、将标识为文件段的数据修改为保存的临时文件名
在ISAPI中 是通过EXTENSION_CONTROL_BLOCK *->ReadClient()的回调来获得数据的,
所以数据不会保存在内存中。
如果只是简单的上传文件,可以在上传时指定 文件的存放路径,由ISAPI来完成所有的工作。
例如:upfile.dll?upload/test 就是保存在 Server.MapPath + upload/test 目录下
如果需要ASP.NET 来处理其他数据的话可以返回一个含有表单的html流,
然后利用JS脚本来自动提交这个表单到ASP.NET具体的页面来继续处理。
例如:下面是ISAPI收到客户上传的文件,其中包含表单信息-----------------------------7d81e441d025cContent-Disposition: form-data; name="UploadID"
de858d87-e8b8-4f7a-a832-357da2efdf13-----------------------------7d81e441d025cContent-Disposition: form-data; name="__VIEWSTATE"
/wEPDwULLTIwODE1OTkzNTUPZBYCAgMPFgIeB2VuY3R5cGUFE211bHRpcGF
ydC9mb3JtLWRhdGFkZAQ0pcd9kiSZ7/MOe0enKOTGFxMk-----------------------------7d81e441d025cContent-Disposition: form-data; name="TextBox1"-----------------------------7d81e441d025cContent-Disposition: form-data; name="TextBox2"-----------------------------7d81e441d025cContent-Disposition: form-data; name="file1"; filename="C:\Documents and Settings\Administrator\??????\componentart.web.ui.rar"Content-Type: application/x-rar-compressed
Rar! ??s这里文件具体内容...-----------------------------7d81e441d025cContent-Disposition: form-data; name="Button1"
开始上传-----------------------------7d81e441d025cContent-Disposition: form-data; name="__EVENTVALIDATION"
/wEWBAL1w7VGAuzRsusGAuzR9tkMAoznisYGMJIxZyapejeOQaIIwcOkPrWK6nE=-----------------------------7d81e441d025c--ISAPI 处理完后 把上面的
-----------------------------7d81e441d025cContent-Disposition: form-data; name="file1"; filename="C:\??????\componentart.web.ui.rar"Content-Type: application/x-rar-compressed
Rar! ??s这里文件具体内容...-----------------------------7d81e441d025c修改为普通表单数据-----------------------------7d81e441d025cContent-Disposition: form-data; name="upfile1"
componentart.web.ui.rar
-----------------------------7d81e441d025c然后转化为正常的网页返回客户< html>
< head>
< /head>
<Script Language="JavaScript"> 
function autoSubmit(){ 
var str = document.myForm.userName.value; 
if(str != ""){ 
document.myForm.submit; 


< /Script> < BODY onLoad="autoSubmit()"> <form name="myForm" method="POST" action="这里就是你ASP.NET处理的URL 如Upfile.aspx">
<input type="text" name="UploadID" value="de858d87-e8b8-4f7a-a832-357da2efdf13" hidden>
<input type="text"
name="__VIEWSTATE" 
value="/wEPDwULLTIwODE1OTkzNTUPZBYCAgMPFgIeB2VuY3R5cGUF
E211bHRpcGFydC9mb3JtLWRhdGFkZAQ0pcd9kiSZ7/MOe0enKOTGFxMk"
hidden>
...
...
...
把所有的ID都写进来就可以了
<input type="submit" value="提交" name="B1"></form></body></html>
就这样就完成了 所有大文件的上传。好处:
1、代码非常简单,根本不需要什么高深的东西,而且代码也很短。
2、对asp 也可以用;
3、稳定性好。坏处:
就是多一步
用户上传->ISAPI处理文件->把表单再返回用户->用户提交表单->ASP.NET处理。
大家决得这个方案怎么样啊,讨论一下.... ....