From 1cb1dade78823c790813a0f2e40237b22da12a23 Mon Sep 17 00:00:00 2001
From: Jon Jenkins <jondjenkins@gmail.com>
Date: Sun, 6 Apr 2014 08:42:25 -0600
Subject: added easyimage for thumbnails

---
 README.md           |  6 +++++-
 package.json        |  5 +++--
 server.js           | 38 ++++++++++++++++++++++++++++++++++----
 static/js/upload.js |  5 ++++-
 4 files changed, 46 insertions(+), 8 deletions(-)

diff --git a/README.md b/README.md
index 447440d..71a8b0d 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,8 @@
 express-upload
 ==============
 
-express-upload: node.js, express, multer, html5 progress upload example
\ No newline at end of file
+express-upload: node.js, express, multer, easyimage, html5 progress upload example
+
+##Image Handling
+
+Uses node module easyimage for thumbnail creation to demonstrate resize upon upload
\ No newline at end of file
diff --git a/package.json b/package.json
index 3b71c81..dcaa4e5 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "express-upload",
-    "description": "express-upload: node.js, express, multer, html5 progress upload example",
+    "description": "express-upload: node.js, express, multer, easyimage, html5 progress upload example",
     "version": "0.0.1",
     "engines": {
         "node": ">= 0.10.x"
@@ -8,6 +8,7 @@
     "private": true,
     "dependencies": {
         "express": "3.x",
-        "multer": "0.x"
+        "multer": "0.x",
+        "easyimage": "0.x"
     }
 }
\ No newline at end of file
diff --git a/server.js b/server.js
index 88abe05..51e2608 100644
--- a/server.js
+++ b/server.js
@@ -1,6 +1,20 @@
-var express = require('express');
-var app = express();
-var multer = require('multer');
+var express = require('express'),
+    app = express(),
+    multer = require('multer'),
+    img = require('easyimage');
+
+var imgs = ['png', 'jpg', 'jpeg', 'gif', 'bmp']; // only make thumbnail for these
+
+function getExtension(fn) {
+    return fn.split('.').pop();
+}
+
+function fnAppend(fn, insert) {
+    var arr = fn.split('.');
+    var ext = arr.pop();
+    insert = (insert !== undefined) ? insert : new Date().getTime();
+    return arr + '.' + insert + '.' + ext;
+}
 
 app.configure(function () {
     app.use(multer({
@@ -13,7 +27,23 @@ app.configure(function () {
 });
 
 app.post('/api/upload', function (req, res) {
-    res.send({file: req.files.userFile.originalname, savedAs: req.files.userFile.name});
+    if (imgs.indexOf(getExtension(req.files.userFile.name)) != -1)
+        img.info(req.files.userFile.path, function (err, stdout, stderr) {
+            if (err) throw err;
+//        console.log(stdout); // could determine if resize needed here
+            img.rescrop(
+                {
+                    src: req.files.userFile.path, dst: fnAppend(req.files.userFile.path, 'thumb'),
+                    width: 50, height: 50
+                },
+                function (err, image) {
+                    if (err) throw err;
+                    res.send({image: true, file: req.files.userFile.originalname, savedAs: req.files.userFile.name, thumb: fnAppend(req.files.userFile.name, 'thumb')});
+                }
+            );
+        });
+    else
+        res.send({image: false, file: req.files.userFile.originalname, savedAs: req.files.userFile.name});
 });
 
 var server = app.listen(3000, function () {
diff --git a/static/js/upload.js b/static/js/upload.js
index 26b2117..a8a0e5a 100644
--- a/static/js/upload.js
+++ b/static/js/upload.js
@@ -38,7 +38,10 @@ $(function () {
             var resJson = JSON.parse(xhr.responseText);
             status(resJson.file + ' done, choose a file');
             setTimer();
-            window.open('./uploads/' + resJson.savedAs, 'upload', 'status=1, height = 300, width = 300, resizable = 0');
+            if (resJson.image)
+                window.open('./uploads/' + resJson.savedAs, 'upload', 'status=1, height = 300, width = 300, resizable = 0');
+            else
+                console.log('not an image');
         };
         xhr.send(formData);
         return false; // no refresh
-- 
cgit v1.2.3