我正在从使用Session的ASP.NET应用程序迁移到没有使用Session的角度/ MVC应用程序。
以下是现有方案: 用户将XML文件上载到服务器,然后我们针对XML运行验证例程。如果有任何警告,我们会向用户提供一个对话框,询问他/她是否要取消或继续。如果用户选择继续,则在服务器上我们将XML文件从Session中拉出并继续处理。
在我们的新应用中,我们无法访问会话,而且我正在采用各种方式处理此问题。
我想知道是否有任何方法可以使用BlueImp jquery fileupload小部件重新上传文件(没有用户的交互重新上传)。
我的实施并不是一成不变的,但这就是我现在所做的工作:
我有两种不同的webAPI方法 - 第一种是初始上传。第二个是'继续,我批准警告'步骤。
我一直在玩jquery fileupload中提供的各种回调。我希望做类似的事情:在发送回调中,进行初始发送,然后阻止,直到我们收到服务器响应,然后向用户提供一个对话框,然后如果用户点击“继续”,则更改fileupload小部件上的URL,然后再次致电发送。
思想?
编辑添加: 我正在尝试利用分块文件功能 - 我想如果我将上传的字节设置为0,它会再次发送整个内容。
答案 0 :(得分:0)
您可以使用MemoryCache
作为会话的简单替代品:
在服务器上,将上传的文件存储在MemoryCache
中,分配GUID并将GUID返回给客户端。当客户端批准警告时,只需使用GUID发送另一个请求,然后继续处理该文件。
由于至少两个原因,第二次上传文件并不是一个好主意:
答案 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(); });
}
})
}
});
}
希望这有助于某人。