Я хочу использовать dropzone.js с помощью vue2-dropzone и иметь возможность загружать в динамическую конечную точку, хотя я не уверен, как это сделать.
Предполагаемый поток:
Я видел в вариантах вариант url
который может принимать функцию, которая может возвращать URL-адрес, но это не похоже на мои потребности. Ограничение заключается в том, что это синхронная операция, в то время как любой запрос к серверу будет асинхронным операциям, неспособным вернуть ответ при return
.
Может ли кто-нибудь указать, справляется ли это с dropzone.js?
Кстати, сервер по существу создает подписанный URL AWS S3 через s3.getSignedUrl()
AWS SDK, а также добавляет дополнительные метаданные.
Вы можете сделать это с помощью событий 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);
}
Где файл - это файл, который вы отправляете (если у вас несколько файлов, он будет выполнять функцию для каждого из них), xhr - это XMLHttpRequest, а formData - это FormData.
Это должно быть выполнимо.
Один из вариантов, который я вижу, - это использовать событие sending
и изменить URL-адрес объекта xhr.