angularjs - 从 Angular 服务获取上传 URL

标签 angularjs dropzone.js

我有一个 Angular 应用程序,我在其中使用拖放文件上传组件 Dropzone.js。上传的文件将直接发布到 Azure blob。 Azure 要求我为每个文件上传生成唯一的 URL。

Dropzone.js 有一个名为“url”的配置选项,它可以是字符串或函数。我需要从此函数调用我的 angular.service 来生成文件将发送到的 Azure 签名 URL。在我的 Controller 中,我生成 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 不支持 Promise。假设我们不重写 Dropzone 来支持 Promise,应该如何处理这个问题?我已经找到了一种方法来让一切停止,直到 promise 得到解决。

最佳答案

Dropzone 有一个名为“accept”的回调。其中一个参数是一个函数,如果一切成功,该函数就会被调用。因此,当我们的promise返回时,我们可以调用这个done函数。此方法的一个缺点是 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();
                    });
                }
            };

关于angularjs - 从 Angular 服务获取上传 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29933165/

相关文章:

javascript - 具有 html 输出的 Angular 三元运算符

javascript - Angular JS - 迭代多个对象的属性

javascript - Angularjs:在自定义指令中,我需要读取使用 ngClick 方法传递的参数

javascript - 将 AngularJS 指令绑定(bind)到元素

json - 接收 JSON 帖子

javascript - 单击 "Submit"按钮时如何调用 Javascript 函数?

javascript - 在局部 View 上设置拖放区的正确方法是什么?

javascript - ASP.Net MVC 中的简单 Dropzone 实现 - 如何获取 Controller 中的数据?

javascript - 拖放区 : prevent addfile twice

javascript - Dropzone.js 与其他表单结合 - html5 需要验证