簡體   English   中英

使用 NodeJS 'fetch' 通過 API 上傳文件

[英]Uploading File via API Using NodeJS 'fetch'

我正在使用現有的 API 調用通過 Nodejs 將文件發送到我們的雲提供商。 我已經在網上看到了幾種不同的方法來執行此操作,但我認為我會堅持使用“獲取”,因為我的大多數其他 API 調用也一直在使用它。 目前,我不斷收到 500 內部服務器錯誤,我不確定為什么? 我最好的結論是我沒有正確發送文件,或者我的一個表單數據沒有正確解析。 請參閱以下代碼:

 const fetch = require("node-fetch"); const formData = require("form-data"); const fs = require("fs"); var filePath = "PATH TO MY FILE ON SERVER WITH FILE NAME"; var accessToken = "Bearer <ACCESS TOKEN>; var url = '<API URL TO CLOUD PROVIDER>'; var headers = { 'Content-Type': 'multipart/form-data', 'Accept': 'application/json', 'Authorization': accessToken }; const form = new formData(); const buffer = fs.readFileSync(filePath); const apiName = "MY_FILE_NAME"; form.append("Content-Type", "application/octect-stream"); form.append("file", filePath); console.log(form); fetch(url, { method: 'POST', headers: headers, body: form }).then(response => response.json()).then(data => { console.log(data) }).catch(err => { console.log(err) });

這是我第一次嘗試這樣的事情,所以我幾乎可以肯定我錯過了一些東西。 感謝任何幫助我朝着正確方向前進的幫助。

所以這個問題正是我上面提到的。 代碼沒有上傳我指定的文件。 我終於明白了為什么,下面是修改后的代碼,它將抓取文件並上傳到我們的雲服務提供:

 const fetch = require("node-fetch"); const formData = require("form-data"); const fs = require("fs"); var apiName = process.env['API_PATH']; var accessToken = "Bearer" +" "+ process.env['BEARER_TOKEN']; var url = process.env['apiEnv'] +"/" +"archive"; var headers = { 'Accept': 'application/json', 'Authorization': accessToken, }; const form = new formData(); const buffer = fs.readFileSync(apiName); const uploadAPI = function uploadAPI() { form.append("Content-Type", "application/octet-stream"); form.append('file', buffer); fetch(url, {method: 'POST', headers: headers, body: form}) .then(data => { console.log(data) }) .catch(err => { console.log(err) }); }; uploadAPI();

作為 Javascript/Nodejs 的新手,我不太確定“緩沖區”變量做了什么。 終於弄清楚之后,我意識到我在請求中添加了太多的正文表單參數,並且文件沒有被提取並發送給提供者。 上面的所有代碼都使用自定義變量,但是如果出於某種原因有人想要使用它,那么只需將自定義變量替換為您自己的……再次感謝您的任何幫助……

import fs from 'fs'
import FormData from 'FormData';

const fileStream = fs.createReadStream('./file.zip');
const form = new FormData();

form.append('key', fileStream, 'file.zip');

const response = await axios.post(url, form, {
    headers: {
        ...form.getHeaders(),
    },
});

暫無
暫無

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

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