Skip to content

Commit

Permalink
Merge pull request #3 from NicolasRitouet/uniqueFilename
Browse files Browse the repository at this point in the history
Add uniqueFilename feature
  • Loading branch information
NicolasRitouet committed Mar 13, 2014
2 parents 6419768 + dd8b721 commit 52f8e63
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 37 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,12 @@ Method DELETE


## Changelog
- [0.0.10](https://github.com/NicolasRitouet/dpd-fileupload/releases/tag/0.0.10)
- Option to store unique file name (add uniqueFilename to the query param. [Cf Demo](https://github.com/NicolasRitouet/dpd-fileupload-demo/blob/master/public/js/main.js#L17))
- * npm update required ([MD5](https://github.com/pvorb/node-md5) dependency added)
- if the name of the resource is the same of the upload directory, it'll automatically append an underscore (_) to the upload directory (cf demo)
- [0.0.9](https://github.com/NicolasRitouet/dpd-fileupload/releases/tag/0.0.9)
- Store file size
- [0.0.8](https://github.com/NicolasRitouet/dpd-fileupload/releases/tag/0.0.8)
- any parameter send in the query will be stored in the resource (and its value will be parsed as JSON if applicable)
- if a parameter property name is "subdir", file will be placed under this subdir in the upload directory
Expand Down
84 changes: 49 additions & 35 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,8 @@ var Resource = require('deployd/lib/resource'),
util = require('util'),
debug = require('debug')('dpd-fileupload'),
formidable = require('formidable'),
fs = require('fs');
fs = require('fs'),
md5 = require('MD5');

/**
* Module setup.
Expand All @@ -23,6 +24,10 @@ function Fileupload(options) {
fullDirectory: __dirname + "/../../public/" + (this.config.directory || 'upload') + "/"
};

if (this.name === this.config.directory) {
this.config.directory = this.config.directory + "_";
}

// If the directory doesn't exists, we'll create it
try {
fs.statSync(this.config.fullDirectory).isDirectory();
Expand Down Expand Up @@ -59,9 +64,10 @@ Fileupload.prototype.handle = function (ctx, next) {
uploadDir = this.config.fullDirectory,
resultFiles = [],
remainingFile = 0,
storedObject = {},
uniqueFilename = false,
subdir,
creator,
storedObject = {};
creator;


// Will send the response if all files have been processed
Expand All @@ -78,11 +84,7 @@ Fileupload.prototype.handle = function (ctx, next) {
if (typeof req.query !== 'undefined') {
for (var propertyName in req.query) {
debug("Query param found: { %j:%j } ", propertyName, req.query[propertyName]);
try {
storedObject[propertyName] = JSON.parse(req.query[propertyName]);
} catch (e) {
storedObject[propertyName] = req.query[propertyName];
}

if (propertyName === 'subdir') {
debug("Subdir found: %j", req.query[propertyName]);
uploadDir = uploadDir.concat(req.query[propertyName]).concat("/");
Expand All @@ -92,46 +94,58 @@ Fileupload.prototype.handle = function (ctx, next) {
} catch (er) {
fs.mkdir(uploadDir);
}

} else if (propertyName === 'uniqueFilename') {
debug("uniqueFilename found: %j", req.query[propertyName]);
uniqueFilename = (req.query[propertyName] === 'true');
continue; // skip to the next param since we don't need to store this value
}

// Store any param in the object
try {
storedObject[propertyName] = JSON.parse(req.query[propertyName]);
} catch (e) {
storedObject[propertyName] = req.query[propertyName];
}
}
}

form.uploadDir = uploadDir;

var renameAndStore = function(file) {
fs.rename(file.path, uploadDir + file.name, function(err) {
if (err) return processDone(err);
debug("File renamed after event.upload.run: %j", err || uploadDir + file.name);
storedObject.filename = file.name;
if (uniqueFilename) {
storedObject.originalFilename = file.originalFilename;
}
storedObject.filesize = file.size;
storedObject.creationDate = new Date().getTime();
self.store.insert(storedObject, function(err, result) {
if (err) return processDone(err);
debug('stored after event.upload.run %j', err || result || 'none');
resultFiles.push(result);
processDone();
});

});
}

form.parse(req)
.on('file', function(name, file) {
debug("File %j received", file.name);

if (uniqueFilename) {
file.originalFilename = file.name;
file.name = md5(Date.now()) + '.' + file.name.split('.').pop();
}
if (self.events.upload) {
self.events.upload.run(ctx, {url: ctx.url, fileSize: file.size, fileName: ctx.url}, function(err) {
self.events.upload.run(ctx, {url: ctx.url, filesize: file.size, filename: ctx.url}, function(err) {
if (err) return processDone(err);
fs.rename(file.path, uploadDir + file.name, function(err) {
if (err) return processDone(err);
debug("File renamed after event.upload.run: %j", err || uploadDir + file.name);
storedObject.filename = file.name;
storedObject.creationDate = new Date().getTime();
self.store.insert(storedObject, function(err, result) {
if (err) return processDone(err);
debug('stored after event.upload.run %j', err || result || 'none');
resultFiles.push(result);
processDone();
});

});
renameAndStore(file);
});
} else {
fs.rename(file.path, uploadDir + file.name, function(err) {
if (err) return processDone(err);
debug("File renamed: %j", err || uploadDir + file.name);
storedObject.filename = file.name;
storedObject.creationDate = new Date().getTime();
self.store.insert(storedObject, function(err, result) {
if (err) return processDone(err);
debug('stored %j', err || result || 'none');
resultFiles.push(result);
processDone();
});
});
renameAndStore(file);
}
}).on('fileBegin', function(name, file) {
remainingFile++;
Expand Down
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
{
"name": "dpd-fileupload",
"description": "File uploader for Deployd",
"version": "0.0.8",
"version": "0.0.10",
"author": "Nicolas Ritouet <[email protected]>",
"dependencies": {
"formidable": "~1.0.14",
"debug": "~0.7.4"
"debug": "~0.7.4",
"MD5": "~1.2.0"
},
"repository": {
"type": "git",
Expand Down

0 comments on commit 52f8e63

Please sign in to comment.