博客 / 詳情

返回

node 下載與上傳文件

將node作為應用程序,從某個網站下載文件,然後將其上傳到服務器上。

需要用到的庫

axios:^0.27.2
form-data:^4.0.0

思路:

1.使用axios將文件下載下來,放在tmp文件夾下,responsetype設為arraybuffer,因為寫文件writefilesync需要使用到arraybuffer,不要下載stream流,使用createwritestream寫文件,因為你還需要把下載下來的文件重新上傳,而createwritestream沒有同步的方法,這會導致你再上傳的時候,文件還沒生成好,造成服務器無法正確獲取文件。

2.讀取tmp文件夾下文件,使用axios上傳即可

const axios = require('axios')
const fs = require("fs");
const path = require("path");
const Formdata = require("form-data");

const fileName = "";//文件名稱
const fileDownloadUrl = ""; //文件下載路徑
const fileUploadUrl = "";//文件上傳路徑

async function downloadAndUpload() {
    let downloadResp = await axios({
        method: "get",
        url: fileDownloadUrl,
        responseType: "arraybuffer"
    })

    let tempFileDir = path.join(path.resolve(__dirname, "tmp"), fileName);//臨時文件目錄

    fs.writeFileSync(tempFileDir, downloadResp.data); //同步寫入臨時文件
    let formdata = new Formdata();
    formdata.append("file", fs.createReadStream(tempfiledir));
    let headers = formdata.getHeaders();

    let uploadResp = await axios({
        method: "post",
        url: fileUploadUrl,
        headers: headers,
        data: formdata,
        maxBodyLength: Infinity,
    })

    return uploadResp;
}
user avatar _raymond 頭像 codingdgsun 頭像 huzilachadedanche 頭像 79px 頭像 codeoop 頭像 91cyz 頭像 saoming_zhang 頭像 tengteng_5c7902af4b01e 頭像 xuriliang 頭像 nealyang231 頭像 dashan_5c230d1ae1f9e 頭像 thehumble 頭像
12 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.