使用request 下载文件:
安装依赖: npm i request
sourceUrl下载源,
targetUrl保存路径
async function downLoadFile(sourceUrl, targetUrl) { let writeStream = fs.createWriteStream(targetUrl); let readStream = request(sourceUrl); readStream.pipe(writeStream); return await new Promise((resolve, reject) => { readStream.on('error', (err) => { writeStream.end(); resolve(false); }) readStream.on('end', () => { writeStream.end(); resolve(true); }); }) }
使用http下载文件
setEncoding 防止乱码
async function downLoadFile(sourceUrl, targetUrl) { return new Promise((resolve, reject) => { http.get(sourceUrl, res => { let fileData = ""; res.setEncoding("binary"); res.on("data", function (chunk) { fileData += chunk; }); res.on("end", function () { fs.writeFile(targetUrl, fileData, "binary", function (err) { resolve(err ? false : true); }); }); }); }) }
使用request服务器端上传文件:
var formData = { name: 'Main.swf', data: fs.createReadStream(targefile) }; await new Promise((resolve, reject) => { request.post({ url: body.targetUrl, formData: formData }, function optionalCallback(err, httpResponse, body) { console.log(body); resolve(body); }) }).catch(ex => { logs.info('上传文件报错:' + ex); });
服务器端接收文件:
async function testUpload(req,res){ var form = new multiparty.Form(); //新建表单 //设置编辑 // form.encoding = 'utf-8'; //设置文件存储路径 form.uploadDir = "temp/"; let [fields, files] = await new Promise((resolve, reject) => { form.parse(req, (err, fields, files) => { if (err) reject('test err'); resolve([fields, files]); }) }) files = files['data'][0]; let name = fields['name'][0]; let url = 'temp/' + Date.now()+ name; //临时bolb文件新名字 fs.renameSync(files.path, url); //修改临时文件名字 res.send('ok'); }