5

Sono riuscito a impostare https://github.com/aguidrevitch/jquery-file-upload-middleware con express.js 4.0 ma ho difficoltà a configurarlo.jquery-file-upload-middleware con express.js: come spostare file e aggiungere filigrane?

Ecco il mio script di upload:

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

}); 

Caricare un file Chicken.jpg ottengo la seguente struttura:

/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 

questo è quello che sto cercando di realizzare:

  1. Sposta il file originale /public/uploads/534a8d502e889f8d6bf9cc07/Chicken.jpg out of t it /public/uploads cartella mantenendo le versioni ridimensionate in posizione.
  2. Aggiungere una filigrana al file /public/uploads/534a8d502e889f8d6bf9cc07/prev/Chicken.jpg.

Qualcuno può consigliare?

Grazie!

risposta

0

Come spostare il file originale:

Sul jquery-file-upload-middleware sito, si spiega come spostare un file, e se leggete la loro documentazione, come spostare un file con un suffisso personalizzato (ID utente, sessione ID, ecc):

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

Se non si vuole fare questo, (This post) spiega come è possibile spostare un file da una posizione a un'altra con il nodo. Ho cambiato l'unlinkSync() per scollegare()

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 
    }); 
}); 
*/ 

aggiungere una filigrana a un file

This post spiega come, con il nodo, si può generare un processo figlio e utilizzare ImageMagick per aggiungere una filigrana a un'immagine:

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