繁体   English   中英

无法在form-data和POST中包装文件来表达端点

[英]Can't wrap file in form-data and POST to express endpoint

我有2个欲望。 我想用fetch发布一个mp3文件。 为了做到这一点,我假设,我想将它包装在一个表单数据对象中。 我可以成功地将这个mp3文件存储在我的反应状态中。 问题是当我尝试使用this.state.myFile检索该文件并将该文件追加到一个密钥然后将console.log附加到formData变量时,它是空的(我假设因为它需要一段时间来分配12mb mp3文件并且js直接进入下一行并尝试在赋值实际完成之前记录它。 无论如何,如果我能够这样做,我可以设置获取正文:myFormDataVar并设置适当的标题对吗?

ex mp3文件发送(~~ 13mb):

文件{name:“tranceLead2.mp3”,lastModified:1555115855246,lastModifiedDate:Fri Apr 12 2019 19:37:35 GMT-0500(Central Daylight Time),webkitRelativePath:“”,size:12851270,...}

我很感激帮助。 下面是我在函数内部的客户端代码:

let form_data = new FormData();

// NOT working for me
form_data.append("title", this.state.title); //from react state
form_data.append("track", this.state.file);  //from react state
// NOT working for me

console.log(form_data); // '{}' <-- output

fetch('http://localhost:8080/tracks', {
            method: 'POST',
            body: form_data,
            headers: {
                'Content-Type': 'multipart/form-data'
            }
        }).then(res => {
            if (res.status !== 200 && res.status !== 201) {
                console.log("Did not send...");
                throw new Error("Failed...");
            }
            console.log("Status: " + res.status);
        }).catch(err => {
            console.log(err);
        });

FormData是一个复杂的对象,当您将实例登录到控制台时,它不会序列化它的条目。

您将看到的只是原型方法。 要访问其中的内容,您需要使用API​​方法,如values()get()entries()等,其中一些返回iterables。 方法和返回类似于Map

 const f = new FormData() f.append('foo', 'bar'); f.append('arr', JSON.stringify([1,2,3])) console.log('get:', f.get('foo')); console.log('entries:', [...f.entries()]); console.log('values:', [...f.values()]); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM