如何使用BlueImp jQuery FileUpload上传后上传的文件?

时间:2016-04-28 20:16:25

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

我正在从使用Session的ASP.NET应用程序迁移到没有使用Session的角度/ MVC应用程序。

以下是现有方案: 用户将XML文件上载到服务器,然后我们针对XML运行验证例程。如果有任何警告,我们会向用户提供一个对话框,询问他/她是否要取消或继续。如果用户选择继续,则在服务器上我们将XML文件从Session中拉出并继续处理。

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

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

我的实施并不是一成不变的,但这就是我现在所做的工作:

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

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

思想?

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

link:function(scope,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(); });                                  
                           }
                       })
                   }
               });
           }

希望这有助于某人。