我使用plupload将图像上传到Amazon S3。 我在服务器上有一个生成我的签名和策略的方法,我通过Http GET调用。
这适用于一次上传一个文件。
问题是当我选择要上传的多个文件时。 我需要在每次上传文件之前调用我的服务器方法 GetPolicy ,但问题是在我从 GetPolicy 获得响应之前,某个时间开始上传。 这里有一些代码:
uploader.bind("FileFiltered", function (up, file) {
getAmazonUploadPolicty(function (response) {
uploader.settings.multipart_params.key = "test/" + response.FileId;
uploader.settings.multipart_params.policy = response.policy;
uploader.settings.multipart_params.signature = response.Signature;
uploader.settings.multipart_params.Filename = response.FileId;
});
});
uploader.bind("FilesAdded", function (up, files) {
setTimeout(function () {
uploader.start();
}, 200);
});
我需要的是能够在getAmazonUploadPolicty方法的回调中以编程方式触发特定文件的上传。
有什么想法吗? 感谢
答案 0 :(得分:2)
找到解决方案。
我创造了一种方法 获取多个文件的策略 - 与用户选择的数量一样多
getAmazonUploadPolicyItems(count, callback);
服务器方法返回策略列表
然后我这样做
var pocilites = { };
uploader.bind("BeforeUpload", function (up, file) {
// this fires before each file upload
var response = policies[file.id];
uploader.settings.multipart_params.key = response.key;
uploader.settings.multipart_params.policy = response.policy;
uploader.settings.multipart_params.signature = response.signature;
uploader.settings.multipart_params.Filename = response.filename;
});
uploader.bind("FilesAdded", function (up, files) {
getAmazonUploadPolicyItems(files.length, function (response) {
$.each(files, function(i, file) {
policies[file.id] = {
key: response[i].Key,
policy: response[i].Policy,
signature: response[i].Signature,
filename: response[i].Filename
};
});
uploader.start();
});
});
希望这可以帮助某人。
PS:由于某些未知原因,有时上传多个文件时我会得到"无效签名"来自亚马逊,但第二次尝试它工作正常。 有什么想法吗?
答案 1 :(得分:0)
听起来很棘手....我认为你最好不要将uploader.start扔进FileFiltered命令,尽管在你的亚马逊回调中你肯定会得到回复,你可以验证它是什么你是在您尝试开始上传之前。
uploader.bind("FileFiltered", function (up, file) {
getAmazonUploadPolicty(function (response) {
uploader.settings.multipart_params.key = "test/" + response.FileId;
uploader.settings.multipart_params.policy = response.policy;
uploader.settings.multipart_params.signature = response.Signature;
uploader.settings.multipart_params.Filename = response.FileId;
uploader.start();
});
});
这仍然无法解决您的多文件问题。我不知道plupload中的任何内容允许你只上传一个特定的文件(虽然它肯定会很好),因为上传时间全部都是作为队列管理的。从理论上讲,你可以为每个文件创建一个新的队列吗?似乎有点奇怪,没有任何暴露开始上传特定文件