Я пытался разобраться в этом формате запроса, но, похоже, не могу этого сделать.
Это HTML:
<form id='emailAttachmentsForm'>
<input name='file' id='emailAttachmentInput' type='file' accept='.gif, .jpg, .png'>
</form>
Вот что у меня на стороне сервера:
def email_params
params.require(:email).permit(:to, :subject, :body, :has_payment_link, :send_me_copy,
email_attachments_attributes: [ :file ]
)
end
Я пытаюсь отформатировать fetch
запрос как с JSON, так и с изображением (jpg, pdf, что угодно).
Это моя текущая итерация, за которой следуют вещи, которые я пробовал:
let emailFormData = new FormData();
let attachment = document.getElementById('emailAttachmentInput').files[0]
let body = {
'to': $('#invoice-view-email-to').val(),
'email':$('#invoice-view-email-to').val(),
'subject': $('#invoice-view-email-subject').val(),
'body': $('#invoice-view-email-body').val(),
'has_payment_link': true,
'send_me_copy': sendSelfCopy,
'email_attachments_attributes': [{'file': attachment}]
}
emailFormData.append('email', body)
console.log(emailFormData.get('email'))
return fetch(`${app.data.apiUrl}/invoices/${invoiceId}/emails`, {
method: 'POST',
headers: {
'Authorization': 'Bearer ' + sessionStorage.getItem('token')
},
body: emailFormData
}
)
.then(data =>{
if(!data.ok){
Promise.reject(data.statusText);
toastBottomError.open()
} else if (data.ok && data.status == 201){
toastBottomEmailSuccess.open();
}
console.log(data)
data
.json()
.then(json =>{
console.log(json)
})
.catch(err => console.error(err))
})
}
Я пробовал:
Добавление заголовков содержимого типа multipart/form-data
и multipart/mixed
. Тем не менее, я прочитал , что я мог просто дать понять это автоматически.
Отправка этого запроса в виде приложения / json без вложения. Это отлично работает. Это не обязательная часть запроса.
Проверка, действительно ли файл захвачен. Да.
File(25946) {name: "Smile.jpg", lastModified: 1535726233571, lastModifiedDate: Fri Aug 31 2018 10:37:13 GMT-0400 (Eastern Daylight Time), webkitRelativePath: "", size: 25946, …}
Какая часть головоломки мне здесь не хватает?
Вот ответ на этот запрос:
Я не уверен, что это за запрещенный бизнес: я могу использовать этот токен для других запросов, и это нормально.
Заранее спасибо за любой совет!