簡體   English   中英

將二進制數據傳遞給 rest-api

[英]passing binary data to rest-api

我想將縮略圖上傳到 viemo api ,並且基於 Vimeo doc,我必須將縮略圖文件作為二進制數據包含在請求正文中,我必須從客戶端“fontend”上傳縮略圖並從rest-api“后端”問題是我的rest-api無法正確接收二進制數據,因為我使用的是express.js,有沒有辦法在后端處理二進制數據。

步驟如下:

客戶端發送縮略圖數據 => 后端通過請求正文接收數據並將其發送到 => 端點

客戶端請求

  const handleSubmit = (event) => {
    event.preventDefault();
    const formData = new FormData();
    formData.append('selectedFile', new Blob([selectedFile], { type: 'application/json' }));
    formData.append('uploadLink', uploadLink);

    const headers = {
      'Content-Type': 'application/json',
      Accept: 'application/vnd.vimeo.*+json;version=3.4',
    };

    try {
      axios
        .post(`${backendPostPath}/thumbnail-upload`, formData, {
          headers,
        })
        .then((response) => {
          applyThumbnial();
          console.log(`${uploadLink}link for upload`);
        });
    } catch (error) {
      console.log(error);
    }
  }; 

后端請求無法接收前端帖子的正文請求作為二進制數據,

const ThumbnailUpload = async (req, res) => {
  const { uploadLink } = req.body;
  const { selectedFile } = req.body;
  console.log(uploadLink);
  const clientServerOptions = {
    uri: `${uploadLink}`,
    encoding: null,
    body: JSON.stringify({
      name: uploadLink,
      file: selectedFile,
    }),
    method: 'PUT',
    headers: {
      'Content-Type': 'application/json',
      Accept: 'application/vnd.vimeo.*+json;version=3.4',
      Authorization: getVimeoAuthorization(),
    },
  };
  request(clientServerOptions, function (error, response) {
    if (error) {
      res.send(error);
    } else {
      const body = JSON.parse(response.body);
      res.send(body);
    }
  });
};

有什么方法可以讓后端請求正文獲取二進制數據,因為我將數據獲取為“未定義”

抱歉更新晚了,我通過使用客戶端相同的 put 請求解決了這個問題,因為 put 請求不需要 Vimeo 訪問令牌,所以您可以使用我上面提到的相同 put 請求,並從標頭中刪除身份驗證,如以下

const handleSubmit = (event) => {
    event.preventDefault();
    const formData = new FormData();
    formData.append('selectedFile', new Blob([selectedFile], { type: 'image/jpg, image/png' }));
    // formData.append('uploadLink', uploadLink);

  

    const headers = {
      'Content-Type': 'image/jpg, image/png',
      Accept: 'application/vnd.vimeo.*+json;version=3.4',
    };

    try {
      axios
        .put(`${uploadLink}`, formData, {
          headers,
        })
        .then((response) => {
      
          console.log(`${uploadLink}link for upload`);
        });
    } catch (error) {
      console.log(error);
    }
  }; 

暫無
暫無

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

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