当前位置: 动力学知识库 > 问答 > 编程问答 >

javascript - jquery-file-upload-middleware with express.js: how to move files & add watermarks?

问题描述:

I managed to setup https://github.com/aguidrevitch/jquery-file-upload-middleware with express.js 4.0 but am having difficulties configuring it.

Here's my upload script:

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);

});

Uploading a Chicken.jpg file i get the following structure:

/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

This is what i'm trying to achieve:

  1. Move the original file /public/uploads/534a8d502e889f8d6bf9cc07/Chicken.jpg out of the /public/uploads folder while keeping the resized versions in place.
  2. Add a watermark to the /public/uploads/534a8d502e889f8d6bf9cc07/prev/Chicken.jpg file.

Can anyone please advise?

Thank you!

网友答案:

How to move the original file :

On jquery-file-upload-middleware website, it explains how to move a file, and if you read their documentation, how to move a file with a custom suffix (User ID, Session ID, etc.) :

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',

If you don't want to do this, (This post) explains how you can move a file from one location to another with node. I changed the unlinkSync() to 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
    });
});
*/

Add a watermark to a file

This post explains how, with node, you can spawn a child process and use ImageMagick to add a watermark to an image :

    // 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
});
分享给朋友:
您可能感兴趣的文章:
随机阅读: