将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;
}
相关文章
暂无评论...