Ron*_*Ron 5 asp.net file-upload session-timeout
我有一个带有 FileUpload 控件的 ASP.NET 网页
<asp:FileUpload ID="fileUploadTN" style="width:250px" runat="server" />
Run Code Online (Sandbox Code Playgroud)
一个问题是上传大文件时,我的 asp.net 会话超时。这是由于 DiscountAsp.net 的限制和不可覆盖的 20 分钟会话超时(除非切换到 SqlServer)。上传大文件没问题,只是会话完成后不久就死了。
所以,我有一个解决方法,让 javascript 计时器定期访问另一个网页,以使会话保持更长时间。
函数 timerEvent()
{
jQuery.get( "/svc.aspx?act=ping", function(data) { });
}
这很好用,除了在文件上传期间。在文件上传过程中,HTTP GET 上没有响应,请求甚至不会到达 svc.aspx 页面。我可以在 Fiddler 中观看并且发生 GET,但没有响应。文件上传完成后,响应会再次启动。但是,如果上传长文件,我的会话可能会超时。
即使我在浏览器中打开一个新窗口并直接转到 svc.aspx 页面,它也会卡在请求中。我可以在不同的应用程序浏览器(例如 FF -> Chrome )窗口中打开一个窗口,然后 svc.aspx 响应。因此,当在同一会话中其他 HTTP GET 在文件上传期间无法响应时,这似乎是问题。
对于较大的文件,最好使用一些 Flash 上传器 - 例如Uploadify或SWFUpload 我更喜欢使用 Uploadify。下面是我的项目的示例。您必须包含 uploadify.css 和 jquery、swfobject 和 jquery.uploadify JavaScript 文件,并在 ASPX 页面中初始化 uploadify:
<link href="uploadify.css" rel="stylesheet" type="text/css" />
<script src="Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script src="Scripts/swfobject.js" type="text/javascript"></script>
<script src="Scripts/jquery.uploadify.v2.1.4.min.js" type="text/javascript"></script>
<script type="text/javascript">
// <![CDATA[
$(document).ready(function () {
$('#fileInput').uploadify({
'uploader': 'Scripts/uploadify.swf',
'script': 'Upload.ashx',
'scriptData': {},
'cancelImg': 'Images/cancel.png',
'auto': true,
'multi': true,
'fileDesc': 'PDF files',
'fileExt': '*.pdf',
'queueSizeLimit': 90,
'sizeLimit': 4000000,
'buttonText': 'Browse',
'folder': '/uploads',
'onComplete': function (event, queueID, fileObj, response, data) {
var message = '<div>' + response + '</div>';
var results = $('#uploadResults');
results.html(message + results.html());
},
'onAllComplete': function (event, queueID, fileObj, response, data) {
}
});
});
// ]]></script>
Run Code Online (Sandbox Code Playgroud)
而不是 asp:FileUpload 控件使用类型为文件的输入。这里需要 HTML:
<input id="fileInput" name="fileInput" type="file" />
<div id="uploadResults"></div>
Run Code Online (Sandbox Code Playgroud)
然后创建 ASHX 处理程序来处理您的上传:
public class Upload : IHttpHandler, IRequiresSessionState
{
public void ProcessRequest(HttpContext context)
{
try
{
HttpPostedFile file = context.Request.Files["Filedata"];
// Validate file for content length, extension etc.
// Store file on server or do what you want with file
// Use context.Response.Write to send messages which will be displayed in <div id="uploadResults"></div>
}
catch (Exception ex)
{
context.Response.Write("Failed to upload file");
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2198 次 |
| 最近记录: |