我一直在尝试弄清楚这种请求格式,但是我似乎做不到。
这是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
我正在尝试使用JSON和图像(jpg,pdf等)格式化fetch
请求。
这是我当前的迭代,后面是我尝试过的事情:
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
的内容类型标题。但是,我read我可以让它自动找出来。
将此请求作为application / json 发送,不带附件。这很好。这不是请求的必需部分。
检查是否实际捕获了文件。是。
File(25946) {name: "Smile.jpg", lastModified: 1535726233571, lastModifiedDate: Fri Aug 31 2018 10:37:13 GMT-0400 (Eastern Daylight Time), webkitRelativePath: "", size: 25946, …}
我在这里错过了哪一个难题?
以下是对此请求的响应:
我不确定这个禁止的生意是什么:我可以将此令牌用于其他请求,这很好。
提前感谢您的任何建议!