Я создаю Vue приложение с бэкэндом Rails. Я слежу за некоторыми статьями в Интернете, в которых предлагается рабочий процесс, в котором я:
- Позвольте моему Rails API генерировать предварительно подписанный URL-адрес S3
- , который я получаю через запрос API в моем Vue app
- Я использую данные из этого запроса, чтобы ПОСТАВИТЬ фактическое изображение непосредственно в S3
Первые два шага работают нормально, но я изо всех сил пытаюсь понять, как чтобы включить в запрос файловые данные типа: 'multipart / form-data'.
Мой код выглядит следующим образом: я использую vuetify в качестве библиотеки компонентов:
<template>
<v-form>
<v-file-input v-model="file" label="File input"></v-file-input>
<v-btn class="mt-2" block bottom color="primary" @click="submit">Opslaan</v-btn>
</v-form>
</template>
<script>
import { axios_request } from '../_helpers';
export default {
name:'AccountImageForm',
data: () => ({
file: {}
}),
methods: {
filesChange(event) {
this.file = event.target.files[0]
},
submit() {
axios_request('/api/v1/images/upload_url')
.then(
response => {
// this response contains the pre-signed info
var data = {
...response.url_fields,
file: this.file
}
var headers = { 'Content-Type': 'multipart/form-data' }
axios_request(response.url, 'POST', data, headers)
.then(
response => {
console.log(response)
}
)
}
)
},
}
}
</script>
This Запросы не выполняются со следующей ошибкой
<Error>
<Code>MalformedPOSTRequest</Code>
<Message>The body of your POST request is not well-formed multipart/form-data.</Message>
<RequestId>x</RequestId>
<HostId>xx</HostId>
</Error>
Когда я смотрю на свои оригинальные данные formData, кажется, что данные файла пусты. Также размер запроса недостаточно велик, поэтому я предполагаю, что файл отсутствует. Есть ли дополнительная работа по сериализации файла для этого запроса?
Спасибо