簡體   English   中英

無法在 Nodejs 中使用 axios 發送表單數據?

[英]Not able to send form data using axios in Nodejs?

我正在嘗試使用 axios 發出 POST 請求,但收到 400 錯誤請求錯誤消息。 我在 POSTMAN 中嘗試了相同的請求,但它工作正常知道我缺少什么嗎? 代碼:

const TWITTER_UPLOAD_MEDIA_BASE_URL = 'https://upload.twitter.com/1.1/media/upload.json';
 
const url = "https://ik.imagekit.io/XXXXXXXXXXXX/test-upload_XXXXXXXXXXX.png";
 
const { data } = await axios.get(url);
const form = new FormData();
form.append('media', data);
 
const token = {
    key: oauth_access_token,
    secret: oauth_access_token_secret
};
 
const oauth = OAuth({
    consumer: {
        key: process.env.TWITTER_CONSUMER_KEY,
        secret: process.env.TWITTER_CONSUMER_SECRET
    },
    signature_method: 'HMAC-SHA1',
    hash_function: (baseString, key) => crypto.createHmac('sha1', key).update(baseString).digest('base64')
});
 
const authHeader = oauth.toHeader(oauth.authorize({
    url: `${TWITTER_UPLOAD_MEDIA_BASE_URL}?media_category=tweet_image`,
    method: 'POST'
}, token));
 
const result = await axios.post(`${TWITTER_UPLOAD_MEDIA_BASE_URL}?media_category=tweet_image`, form, {
    headers: {
        Authorization: authHeader["Authorization"],
        'Content-type': "multipart/form-data",
        "Content-Transfer-Encoding": "base64"
    }
});

我也試過:

 
const url = "https://ik.imagekit.io/XXXXXXXXXXXX/test-upload_XXXXXXXXXXX.png";
 
const image = await axios.get(url, { responseType: 'arraybuffer' });
const raw = new Buffer.from(image.data).toString('base64');
const base64Image = "data:" + image.headers["content-type"] + ";base64," + raw;
 
const token = {
    key: oauth_access_token,
    secret: oauth_access_token_secret
};
 
const oauth = OAuth({
    consumer: {
        key: process.env.TWITTER_CONSUMER_KEY,
        secret: process.env.TWITTER_CONSUMER_SECRET
    },
    signature_method: 'HMAC-SHA1',
    hash_function: (baseString, key) => crypto.createHmac('sha1', key).update(baseString).digest('base64')
});
 
const authHeader = oauth.toHeader(oauth.authorize({
    url: `${TWITTER_UPLOAD_MEDIA_BASE_URL}?media_category=tweet_image`,
    method: 'POST'
}, token));
 
const result = await axios.post(`${TWITTER_UPLOAD_MEDIA_BASE_URL}?media_category=tweet_image`, {media_data: base64Image}, {
    headers: {
        Authorization: authHeader["Authorization"],
        'Content-type': "multipart/form-data",
        "Content-Transfer-Encoding": "base64"
    }
});

機器人片段不起作用。 直到第 27 行(第一個代碼片段),一切都是正確的。 問題來自第 28 行 axios 和表單內容 POSTMAN 成功請求的屏幕截圖: 在此處輸入圖像描述

在此處輸入圖像描述

在此處輸入圖像描述

我認為 axios 有一些嚴重的問題:

  1. https://github.com/mzabriskie/axios/issues/789

  2. https://github.com/axios/axios/issues/1006

  3. https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-media/api-reference/post-media-upload

  4. Twitter 媒體上傳指南: https://developer.twitter.com/en/docs/twitter-api/v1/media/upload-practic/uploading-media

首先下載您的圖像,例如:

const url = 'https://url-to-your-image'
const { data } = await axios.get(url, {
      responseType: 'stream',
})

之后你可以 append 直接在formdata中的圖像

const formData = new FormData()
formData.append('media', stream)

最后上傳

const result = await axios.post(`${TWITTER_UPLOAD_MEDIA_BASE_URL}? 
media_category=tweet_image`, formData, {
   headers: {
    Authorization: authHeader["Authorization"],
    'Content-type': "multipart/form-data",
    "Content-Transfer-Encoding": "base64"
   }
});

如果您仍然遇到問題,請告訴我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM