您正在尝试在本地处理文件
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配置。



