【问题标题】:How can I access the file I uploaded after uploading it using the BlueImp jQuery FileUpload?使用 BlueImp jQuery FileUpload 上传文件后,如何访问我上传的文件?
【发布时间】:2016-08-23 19:24:26
【问题描述】:

我正在从使用 Session 的 ASP.NET 应用程序迁移到不使用的 Angular/MVC 应用程序。

这是现有的场景: 用户将 XML 文件上传到服务器,我们在服务器上运行针对 XML 的验证例程。如果有任何警告,我们会向用户显示一个对话框,询问他/她是要取消还是继续。如果用户选择继续,我们会在服务器上将 XML 文件拉出 Session 并继续处理。

在我们的新应用中,我们无法访问会话,我正在尝试各种处理此问题的方法。

我想知道是否有任何方法可以使用 BlueImp jquery 文件上传小部件重新上传文件(无需用户交互重新上传)。

我的实现并不是一成不变的,但这是我目前正在做的事情:

我有 2 种不同的 webAPI 方法 - 第一种是初始上传。第二个是“继续,我批准警告”步骤。

我一直在玩弄 jquery 文件上传中可用的各种回调。我希望做类似的事情:在发送回调中,进行初始发送,然后阻塞直到我们收到服务器响应,然后向用户提供一个对话框,然后如果用户单击继续,则更改文件上传小部件上的 URL,然后再次调用 send。

想法?

编辑添加: 我正在尝试利用分块文件功能 - 我想如果我将上传的字节设置为 0,它会再次发送整个内容。

【问题讨论】:

    标签: jquery asp.net-mvc file-upload asp.net-web-api blueimp


    【解决方案1】:

    可能不是最优雅的解决方案,但这是我想出的,并且对我有用。这是一个 angularJS 指令;这是(删节的)链接功能:

    链接:函数(范围、iElement、iAttr) {

                   var continueUpload = function ()
                   {
                       iElement.fileupload({
                                       url: 'myUrl_continue',
                                       dataType: 'json'
                                   });
    
                                   var filesList = iElement[0].files;
    
                                   iElement.fileupload('send', { files: filesList });
                   };
    
                   iElement.fileupload({
                       url: 'myUrl',
                       dataType: 'json',
                       add: function (e, data)
                       {                        
                           var jqXHR = data.submit()
                           .success(function (result, textStatus, jqXHR)
                           {
                               if ((result == 1) || (result == 2))
                               {
                                   Confirm(msg, scope, function () { continueUpload(); }, function () { doNothingRightNow(); });                                  
                               }
                           })
                       }
                   });
               }
    

    希望这对某人有所帮助。

    【讨论】:

      【解决方案2】:

      您可以使用MemoryCache 作为会话的简单替换:

      在服务器上,将上传的文件存储在MemoryCache 中,分配一个 GUID 并将 GUID 返回给客户端。当客户端批准警告后,只需发送另一个仅带有 GUID 的请求,然后继续处理文件。

      第二次上传文件不是一个好主意,至少有两个原因:

      1. 您不知道文件是否已更改,因此您必须重新检查整个内容。
      2. 如果您只发送一次,您可以节省带宽(对于移动应用程序尤其重要)。

      【讨论】:

      • 感谢您的建议。我喜欢返回 GUID 的想法,我看到这种方法的唯一问题是我不知道何时过期。我想出了一个解决方案,我将在下面分享 - 你提出的第一个问题对我来说不是问题;我确定文件没有更改,因为文件中不涉及用户交互。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 2017-08-30
      • 2013-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多