【问题标题】:Large File uploading to asp.net MVC大文件上传到 asp.net MVC
【发布时间】:2010-10-16 02:02:26
【问题描述】:

我需要一种在 asp.net mvc 网站中上传大文件(600 mb 到 4 gb)的方法。 目前我正在使用swfupload;它工作得很好,但它对网络服务器造成了巨大的打击,因为它通过一次大上传发送它,而且我必须在 web.config 中设置它以允许这么大的文件,这是一个巨大的安全风险。过去,当我进行 Web 表单开发时,我使用 Neatupload 将文件分成块并单独上传。我正在寻找一种在 mvc 中上传大文件的方法,该文件通过分块上传。关于如何做到这一点的任何想法?

【问题讨论】:

    标签: asp.net asp.net-mvc swfupload chunking neatupload


    【解决方案1】:

    【讨论】:

    • 谢谢伙计,这就是我一直在寻找的
    • 让任何访问这里的人都知道。我对它进行了一些修改并现在使用它。一旦文件超过 1GB,swfupload 就会给我带来太多问题
    【解决方案2】:

    我最终使用Darren Johnstone's ASP.NET File Upload Module 来处理服务器端的上传。虽然我稍微修改了它,以便它可以在查询字符串上使用一个 guid,它将临时文件保存到该 guid 名称。

    这很好,因为它在文件到达服务器时保存了文件,并将文件从发布的数据中剥离出来,然后发送到指定控制器上的操作。

    【讨论】:

    • 你是如何在没有 runat=server 控件的情况下让它在 ASP.NET MVC 中工作的?剩下的课程有打卡点吗?您介意分享一个代码示例吗?
    • 上传模块包含 2 个部分,第一个是一个 httphandler,当一个文件被发布(使用 mime 编码)时,它会直接删除文件并保存,然后让任何页面/控制器被调用然后被调用,只是文件 [] 数组为空。第二部分是用于标准 asp.net 表单的控件。我根本没有使用这些控件。相反,我使用了我在原始问题中链接的 swfupload,它使用 js 和 flash 来上传文件。然后,我在 swfupload 配置为发布到的控制器上调用了“UploadAsync”操作。
    【解决方案3】:

    我认为的例子:

    <input id="FileGUID" name="FileGUID" type="hidden" value="f632c00b-9b66-4716-8075-79df63b780fb" />
        <input type="file" id="FileUpload1" name="fileUpload1" />
    
        <script type="text/javascript">
            var UploadUrl = '/Video/AsyncUpload?FileGUID=f632c00b-9b66-4716-8075-79df63b780fb';
            $(function() {
                $("#FileUpload1").makeAsyncUploader({
                    upload_url: UploadUrl,
                    flash_url: '/Content/Flash/swfupload.swf',
                    button_image_url: '/Content/Images/blank-button.png',
                    button_text: '<font face="Helvetica, Arial" size="13pt" color="#ffffff">Upload File</font>',
                    disableDuringUpload: 'input[type="submit"]',
                    file_size_limit: '8024 MB',
                    button_text_top_padding: 2
                });
            });
        </script>
    

    然后在此页面的实际保存操作中,我查找一个文件,其中 asyncupload 操作将根据 FileGUID 保存文件

    【讨论】:

      【解决方案4】:

      可以在here 找到一个 SignalR 实现示例。

      这还包括使用 HttpContext.Request.GetBufferlessInputStream() 的功能,它允许您在完全上传之前开始处理发布数据。

      【讨论】:

      • 您提供的链接已失效。
      • 我已经替换了链接
      猜你喜欢
      • 2010-11-05
      • 2014-08-06
      • 1970-01-01
      • 2011-06-18
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多