ASP.NET 网页在文件上传期间无响应

标签 asp.net file-upload session-timeout

我有一个带有 FileUpload 控件的 ASP.NET 网页


      <asp:FileUpload ID="fileUploadTN" style="width:250px" runat="server" />

一个问题是上传大文件时,我的 asp.net session 超时。这是由于 DiscountAsp.net 的限制和不可覆盖的 20 分钟 session 超时(除非切换到 SqlServer)。上传大文件没问题,只是 session 完成后不久就死了。

所以,我有一个解决方法,让 javascript 计时器定期访问另一个网页,以使 session 保持更长时间。

函数 timerEvent()
{
jQuery.get( "/svc.aspx?act=ping", function(data) { });
}

这很好用,除了在文件上传期间。在文件上传过程中,HTTP GET 上没有响应,请求甚至不会到达 svc.aspx 页面。我可以在 Fiddler 中观看并且发生 GET,但没有响应。文件上传完成后,响应会再次启动。但是,如果上传长文件,我的 session 可能会超时。

即使我在浏览器中打开一个新窗口并直接转到 svc.aspx 页面,它也会卡在请求中。我可以在不同的应用程序浏览器(例如 FF -> Chrome )窗口中打开一个窗口,然后 svc.aspx 做出响应。因此,当在同一 session 中其他 HTTP GET 在文件上传期间无法响应时,这似乎是问题。

最佳答案

对于较大的文件,最好使用一些 Flash 上传器 - 例如 UploadifySWFUpload
我更喜欢使用 Uploadify。以下是我项目中的示例。
您必须在 ASPX 页面中包含 uploadify.css 和 jquery、swfobject 和 jquery.uploadify JavaScript 文件并初始化 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>

而不是 asp:FileUpload 控件使用输入类型 - 文件。这里需要 HTML:
    <input id="fileInput" name="fileInput" type="file" />
    <div id="uploadResults"></div>

然后创建将处理您上传的 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");
        }
    }
}

关于ASP.NET 网页在文件上传期间无响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5554279/

相关文章:

javascript - 在 URL 中传递 base64 信息作为查询字符串的正确方法?

asp.net - 如何列出所有已安装的 NuGet 包?

node.js - 在node.js中使用express时如何更改上传路径

ruby-on-rails - 如何将 Rails session cookie 过期时间设置为 "session"

c# - HttpRuntime.Cache 和 Session 有什么区别?

c# - Lambda-列表中存在的列表中的用户ID

java - 如何从客户端直接上传图片到服务器

php - 文件上传返回 "undefined index"错误

node.js - 更新/刷新快速 session

PHP 在 10 分钟不活动后自动注销