提问者:小点点

AXIOS NodeJs中的POST文件


将文件作为AXIOS NodeJS中的原始主体发布。 我尝试了许多方法来实现这一点,但没有一种方法奏效。

我试过什么?

var file = fs.readFileSync("a.jpg");
var body = await axios({ method: 'POST', url : "myUrl", data : file });
var file = fs.readFileSync("a.jpg").toString();
var body = await axios({ method: 'POST', url : "myUrl", data : file });
var file = fs.readFileSync("a.jpg",{encoding:"utf8"}).toString();
var body = await axios({ method: 'POST', url : "myUrl", data : file });
var file = fs.readFileSync("a.jpg");
file = Buffer.from(file).toString('utf8')
var body = await axios({ method: 'POST', url : "myUrl", data : file });
var file = fs.createReadStream("a.jpg");
var body = await axios({ method: 'POST', url : "myUrl", data : file });

但没有一个像我想要的那样奏效。

浏览器中JQuery AJAX的实际工作示例

var fileupload = $("#inpFile")[0];
var file = fileupload.files[0];
$.ajax({
    url: "https://hookb.in/b9gqlwbZeaT3DDogQ7Om",
    type: 'POST',
    success: function (response) {
        DisplayMessage(response);
    },
    data: file,
    contentType: false,
    processData: false
});

共1个答案

匿名用户

您尝试过设置content-type头吗? 根据Talg123,我发现如果在jQuery中将contenttype设置为false,它可能等同于multipart/form-data

客户端:

null

async function main(){
  try{
    const buffer = new ArrayBuffer(8);
    const data = new FormData();
    const blob = new Blob([buffer],{type : 'multipart/form-data'});
    data.append('data', blob);
    const options = {
      url: "https://hookb.in/b9gqlwbZeaT3DDogQ7Om",
      method: 'POST',
      headers: { 'content-type': 'multipart/form-data' },
      data
    };
    let result = await axios(options);
    console.log(result);
  }catch(e){
    console.error("error",e);
  }
}
main()
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.min.js"></script>