从 Angular 服务获取上传 URL
Get Upload URL from Angular Service
我有一个 Angular 应用程序,我在其中使用拖放文件上传组件 Dropzone.js。上传的文件将直接发布到 Azure blob。 Azure 要求我为每个文件上传生成唯一的 URL。
Dropzone.js 有一个名为 "url" 的配置选项,它可以是字符串或函数。我需要从这个函数调用我的 angular 服务来生成 Azure 签名的 URL 文件将被发送到哪里。在我的控制器中,我将 Dropzone 的配置生成为:
var options = {
url: function (files) {
var f = files[0];
return _fileHandlingService.getUploadUrl(f.name);
},
maxFiles: 10,
maxFilesize: 20,
acceptedFiles: "image/*",
method: "PUT"
};
我的文件处理服务如下:
getUploadUrl = function (filename) {
this.$http.get("/api/getUploadUrl", { params: { filename: filename } }).then(function (resp) {
return resp.data;
});
};
问题是 promise 没有及时解决以提供给 Dropzone,而且 Dropzone 不支持 promises。假设我们不重写 Dropzone 来支持 promise,应该如何处理?在承诺得到解决之前,我已经找到了让一切停止的方法。
Dropzone 有一个名为 "accept" 的回调。其中一个参数是一个函数,如果一切成功,该函数就会被调用。因此,我们可以在承诺 returns 时调用此完成函数。这种方法的一个缺点是 URL 是在文件排队和上传时生成的。就我而言,根据我的到期日期和用户上传所需的时间,URL 可能会过期的可能性很小。我的配置选项现在看起来像:
var options = {
url: function (files) {
var f = files[0];
return f.uploadUrl;
},
maxFiles: 10,
maxFilesize: 20,
acceptedFiles: "image/*",
method: "PUT",
accept: function (file, done) {
_fileHandlingService.getUploadUrl(file.name).then(function (data) {
file.uploadUrl = data;
done();
});
}
};
我有一个 Angular 应用程序,我在其中使用拖放文件上传组件 Dropzone.js。上传的文件将直接发布到 Azure blob。 Azure 要求我为每个文件上传生成唯一的 URL。
Dropzone.js 有一个名为 "url" 的配置选项,它可以是字符串或函数。我需要从这个函数调用我的 angular 服务来生成 Azure 签名的 URL 文件将被发送到哪里。在我的控制器中,我将 Dropzone 的配置生成为:
var options = {
url: function (files) {
var f = files[0];
return _fileHandlingService.getUploadUrl(f.name);
},
maxFiles: 10,
maxFilesize: 20,
acceptedFiles: "image/*",
method: "PUT"
};
我的文件处理服务如下:
getUploadUrl = function (filename) {
this.$http.get("/api/getUploadUrl", { params: { filename: filename } }).then(function (resp) {
return resp.data;
});
};
问题是 promise 没有及时解决以提供给 Dropzone,而且 Dropzone 不支持 promises。假设我们不重写 Dropzone 来支持 promise,应该如何处理?在承诺得到解决之前,我已经找到了让一切停止的方法。
Dropzone 有一个名为 "accept" 的回调。其中一个参数是一个函数,如果一切成功,该函数就会被调用。因此,我们可以在承诺 returns 时调用此完成函数。这种方法的一个缺点是 URL 是在文件排队和上传时生成的。就我而言,根据我的到期日期和用户上传所需的时间,URL 可能会过期的可能性很小。我的配置选项现在看起来像:
var options = {
url: function (files) {
var f = files[0];
return f.uploadUrl;
},
maxFiles: 10,
maxFilesize: 20,
acceptedFiles: "image/*",
method: "PUT",
accept: function (file, done) {
_fileHandlingService.getUploadUrl(file.name).then(function (data) {
file.uploadUrl = data;
done();
});
}
};