axios 上傳文件遇到的坑

         最近大佬佈置了一個任務,實現埋點的小工具開發,主要任務就是實現一個腳本工具,能夠快速實現埋點的創建

        其中有一部分就是使用axios 發送數據,這裏記錄一下遇到的坑

        在使用 Node.js 部分埋點時,主要的流程可以是這樣的 https://www.cnblogs.com/ajanuw/p/9822880.html

(async () => {
  const l = console.log;
  const axios = require("axios");
  const fs = require("fs-extra");
  var FormData = require("form-data");
  var form = new FormData();
  form.append("file", fs.createReadStream("C:\\Users\\Administrator\\Pictures\\a.jpg"));
  form.append("type", "avatar");

  let r = await axios({
    method: "post",
    url: "http://localhost:5000/upload",
    data: form,
    headers: form.getHeaders()
  }).then(v => v.data);

  l(r); // ok
})();

         自己使用引入 fs 和 form-data 後即可,也不需要特殊指定 form 的type 類型。網上查了很多發現都要使用form-data , 研究了一圈基本使用 form-data 是沒問題的。用 createReadStream 讀取的是下圖的這些配置文件 

       使用 readFileSync 後是:

      可以看到用 readFileSync 讀取的文件是一個二進制的文件,這個與學城上的發送請求是一樣的。但是這樣還是沒有解決問題,研究原項目上的請求後發現,在請求頭後還會攜帶一個 boundary,加上 boundary 後該問題得以解決。

     代碼

var FormData=require('form-data')
var formdata=new FormData();
var headers={
    "Cookie":"xx"
    "Content-type":`multipart/form-data;boundary=${formdata._boundary}`
}

      總結:使用 readFileSync 還是 createReadStream 都可以讀取文件,在nodejs 端發送表格請求時,還需要加入formdata._boundary 。boundary 就是分割線的意思,用於分割表單的每項數據也表示表格的結束。沒加這個後端就識別不了,這個Bug 前後加起來卡了一天多,做個小記錄

發佈了67 篇原創文章 · 獲贊 10 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章