栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何通过multer访问上传的文件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何通过multer访问上传的文件?

您正在尝试在本地处理文件

s3
。该文件必须是您服务器的文件系统,或者至少要在上公开可用
s3
。因此,您在这里有两个选择。

a) 您可以先将所有文件上传到运行express的服务器上( 不在

s3
,首先我们将它们临时存储)。如果文件是
.gif
,请对其进行处理并上传结果
.mp4
文件,否则上传到
s3
。这是一个工作示例:

var fs         = require('fs')var path       = require('path')var express    = require('express');var bodyParser = require('body-parser');var aws        = require('aws-sdk');var multer     = require('multer');var ffmpeg     = require('fluent-ffmpeg');var shortid    = require('shortid');aws.config.update();var app    = express();var s3     = new aws.S3();var bucket = 'myBucket';var upload = multer({    storage: multer.diskStorage({        destination: './uploads/',        filename: function (req, file, cb){ // user shortid.generate() alone if no extension is needed cb( null, shortid.generate() + path.parse(file.originalname).ext);        }    })});//----------------------------------------------------app.post('/upload', upload.single('file'), function (req, res, next) {    var fileInfo = path.parse(req.file.filename);    if(fileInfo.ext === '.gif'){        var videoPath = 'uploads/' + fileInfo.name + '.mp4';        ffmpeg(req.file.path) .setFfmpegPath("C:\ffmpeg\bin\ffmpeg.exe") .output(videoPath) .on('end', function() {     console.log('[ffmpeg] processing done');     uploadFile(videoPath, fileInfo.name + '.mp4'); }) .run();    }    else {        uploadFile(req.file.path, req.file.filename);    }    res.end();});//----------------------------------------------------function uploadFile(source, target){    fs.readFile(source, function (err, data) {        if (!err) { var params = {     Bucket      : bucket,     Key         : target,     Body        : data }; s3.putObject(params, function(err, data) {     if (!err) {         console.log('[s3] file uploaded:');         console.log(data);         fs.unlink(source); // optionally delete the file     }     else {         console.log(err);     } });        }    });}app.listen(3000);

b)
或者,如果您可以

s3
公开文件,则可以使用来上传所有文件
multer-s3
。由于
ffmpeg
还接受网络位置作为输入路径,因此您可以向其传递文件的
s3
位置,
.gif
然后上传转换后的
.mp4
文件:

var fs         = require('fs')var path       = require('path')var express    = require('express');var bodyParser = require('body-parser');var aws        = require('aws-sdk');var multer     = require('multer');var ffmpeg     = require('fluent-ffmpeg');var multerS3   = require('multer-s3');aws.config.update();var app    = express();var s3     = new aws.S3();var bucket = 'myBucket';var upload = multer({    storage: multerS3({        s3: s3,        bucket: bucket,        key: function (req, file, cb) { cb(null, file.originalname);        },        acl: 'public-read'    })});----------------------------------------------------app.post('/upload', upload.single('file'), function (req, res, next) {    var fileInfo = path.parse(req.file.originalname);    if(fileInfo.ext === '.gif'){        var videoPath = 'uploads/' + fileInfo.name + '.mp4';        ffmpeg(req.file.location) .setFfmpegPath("C:\ffmpeg\bin\ffmpeg.exe") .output(videoPath) .on('end', function() {     console.log('[ffmpeg] processing done');     uploadFile(videoPath, fileInfo.name + '.mp4'); }) .run();    }    res.end();})//----------------------------------------------------function uploadFile(source, target){    fs.readFile(source, 'base64', function (err, data) {        if (!err) { var params = {     Bucket      : bucket,     Key         : target,     Body        : data,     ContentType : 'video/mp4' }; s3.putObject(params, function(err, data) {     if (!err) {         console.log('[s3] file uploaded:');         console.log(data);         fs.unlink(source); // optionally delete the file     }     else {         console.log(err);     } });        }    });}app.listen(3000);

对于这两个示例,请记住创建一个

uploads/
文件夹并使用您的
aws
配置。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/452481.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号