提取带有附件的POST请求格式

时间:2018-08-31 19:41:04

标签: javascript ruby-on-rails https fetch

我一直在尝试弄清楚这种请求格式,但是我似乎做不到。

这是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-datamultipart/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, …}

我在这里错过了哪一个难题?

以下是对此请求的响应:

enter image description here

我不确定这个禁止的生意是什么:我可以将此令牌用于其他请求,这很好。

提前感谢您的任何建议!

0 个答案:

没有答案