node.js服务器端下载、上传文件

使用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');
}
原文地址:https://www.cnblogs.com/xbblogs/p/9072722.html