乐趣区

关于react.js: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;
}
退出移动版