將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;
}