jquery-file-upload-middleware with express.js:如何移动文件和添加水印?

我设法用express.js 4.0设置https://github.com/aguidrevitch/jquery-file-upload-middleware ,但是在configuration时遇到困难。

这是我的上传脚本:

var upload = require('jquery-file-upload-middleware'); upload.configure({ imageVersions: { thumbs: { width: 80, height: 80 }, prev: { width: 1280, height: 1024 } } }); app.use('/admin/upload', function (req, res, next) { // imageVersions are taken from upload.configure() upload.fileHandler({ uploadDir: function () { return __dirname + '/public/uploads/' + req.session.eventID; } })(req, res, next); }); 

上传一个Chicken.jpg文件,我得到以下结构:

 /public/uploads/ -> public uploads folder 534a8d502e889f8d6bf9cc07/ -> upload session folder prev/ -> resized version folder Chicken.jpg thumbs/ -> another resized version folder Chicken.jpg Chicken.jpg -> original file 

这是我想要实现的:

  1. 将原始文件/public/uploads/534a8d502e889f8d6bf9cc07/Chicken.jpg移出/ public / uploads文件夹,同时保留调整后的版本。
  2. /public/uploads/534a8d502e889f8d6bf9cc07/prev/Chicken.jpg文件添加一个水印。

任何人都可以请指教?

谢谢!

       

网上收集的解决方案 "jquery-file-upload-middleware with express.js:如何移动文件和添加水印?"

如何移动原始文件:

在jQueryfile upload中间件网站上,它解释了如何移动一个文件,如果你阅读他们的文档,如何移动一个自定义后缀(用户ID,会话ID等)的文件:

 app.use('/api', function (req, res, next) { req.filemanager = upload.fileManager(); next(); }); app.use('/api/endpoint', function (req, res, next) { // your real /api handler that will actually move the file ... // req.filemanager.move(filename, path, function (err, result)) req.filemanager.move('SomeFile.jpg', 'project1', function (err, result) { // SomeFile.jpg gets moved from uploadDir/SomeFile.jpg to // uploadDir/project1/SomeFile.jpg // if path is relative (no leading slash), uploadUrl will // be used to generate relevant urls, // for absolute paths urls are not generated if (!err) { // result structure // { // filename: 'SomeFile.jpg', // url: '/uploads/project1/SomeFile.jpg', 

如果你不想这样做,( 本文 )解释了如何使用节点将文件从一个位置移动到另一个位置。 我将unlinkSync()更改为unlink()

 var fs = require('fs'); //var util = require('util'); var is = fs.createReadStream('source_file'); var os = fs.createWriteStream('destination_file'); is.pipe(os); is.on('end',function() { fs.unlink('source_file', function(err){ // Continue execution }); }); /* node.js 0.6 and earlier you can use util.pump: util.pump(is, os, function() { fs.unlink('source_file', function(err){ // Continue execution }); }); */ 

为文件添加水印

本文解释了如何使用节点生成subprocess,并使用ImageMagick为图像添加水印:

  // Require our module dependencies var exec = require('child_process').exec; // Create command array to invoke ImageMagick composite where // -dissolve is the amount of transparency for the watermark // -gravity tells how to align images of varying size // -quality is the image quality of the JPEG (not required if producing PNG) var command = [ 'composite', '-dissolve', '50%', '-gravity', 'center', '-quality', 100, pathToWatermarkJpg, pathToImageJpg, pathToResultJpg; ]; // Join command array by a space character and then execute command exec(command.join(' '), function(err, stdout, stderr) { // Do stuff with result here });