我希望通过dropzone.js使用vue2-dropzone,并且需要能够上传到动态端点,但我不知道该怎么做。
预期的流程是:
我确实在选项中看到有url
选项可以使用可以返回URL的函数,但这似乎不能很好地适应我的需要。限制是它是同步操作,而对服务器的任何查询都是异步操作,无法在return
上返回响应。
任何人都可以用dropzone.js表明这是否可行?
BTW服务器实际上是通过AWS SDK的s3.getSignedUrl()
创建签名的AWS S3 URL,并且还添加了额外的元数据。
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以使用dropzone事件
执行此操作<vue-dropzone ref="vueDropzone" id="dropzone" :options="dropzoneOptions" @vdropzone-processing="dropzoneChangeUrl"></vue-dropzone>
并在你的vue
data() {
return {
dynamicId: 123,
dropzoneOptions: {
url: 'url',
thumbnailWidth: 150,
maxFilesize: 0.5,
uploadMultiple: true
}
}
},
methods: {
dropzoneChangeUrl() {
this.$refs.vueDropzone.setOption('url', `http://your-url.com/${this.dynamicId}`);
},
}
如果要在请求中添加一些标头或在formData中添加参数,可以使用vdropzone-sending(file, xhr, formData)
事件执行此操作。这是一个例子
<vue-dropzone ref="vueDropzone" id="dropzone" :options="dropzoneOptions" @vdropzone-sending="sendImages"></vue-dropzone>
在你的vue
sendImages(file, xhr, formData) {
xhr.setRequestHeader('Header', 'Your Header');
formData.append('photos', file);
}
file是您要发送的文件(如果您有多个文件,它将为每个文件执行此功能),xhr是XMLHttpRequest,formData是FormData。