Guess the issue was implementing a 'method on the view'. If async image processing and manipulation is of interest, https://github.com/hacksparrow/node-easyimage would help.
On Wed, May 16, 2012 at 6:10 PM, yogesh agrawal <saggiyog...@gmail.com>wrote: > Not able to found any async image resize code in dropup > > > On Wed, May 16, 2012 at 6:03 PM, Anand George <mranandgeo...@gmail.com>wrote: > >> http://dropup.net/ seems to be a similar implementation. The code is >> available on Github https://github.com/daleharvey/dropup >> >> >> On Wed, May 16, 2012 at 5:57 PM, Tim Caswell <t...@creationix.com> wrote: >> >>> >>> >>> On Wed, May 16, 2012 at 6:14 AM, Alan Hoffmeister < >>> alanhoffmeis...@gmail.com> wrote: >>> >>>> Tim that's a very good idea! >>>> But how can I share the hash and the dimensions between the view >>>> helper and the resizing route? >>>> >>> >>> Well that depends on the nature of your code. Is it a framework like >>> express, is it something else. If you're running the entire site in a >>> single process then a single variable in the outer closure would be global >>> enough. Just like I wrote in the example, my lookup tables are outside the >>> helper and the http route handler. As long as it's in a common place they >>> can both see in their closures, they will have access. >>> >>> >>> >>>> >>>> -- >>>> Att, >>>> Alan Hoffmeister >>>> >>>> >>>> 2012/5/15 Tim Caswell <t...@creationix.com>: >>>> > btw, this code isn't perfect. For example, there is no reason to use >>>> the >>>> > expensive md5 hash. It's not like the browser is sending you path, >>>> width, >>>> > and height and you need to re-hash them. Any random unique string >>>> would be >>>> > fine. Also the key variable would sufficient as well. Yes, the url >>>> > contains the parameters, but they can't be modified to create a new >>>> value. >>>> > Only existing keys would be served. >>>> > >>>> > The important part is to create some unique key to embed in the url >>>> so that >>>> > later when the request comes in, you have a way to map it to the >>>> original >>>> > resize command. The caching and batching pattern is described >>>> > here http://nodebits.org/distilled-patterns >>>> > >>>> > >>>> > On Tue, May 15, 2012 at 3:47 PM, Tim Caswell <t...@creationix.com> >>>> wrote: >>>> >> >>>> >> >>>> >> >>>> >> On Tue, May 15, 2012 at 2:46 PM, Alan Hoffmeister >>>> >> <alanhoffmeis...@gmail.com> wrote: >>>> >>> >>>> >>> Hey guyz, of course I need to validate, I just don't want to expose >>>> >>> the dimensions. >>>> >> >>>> >> >>>> >> The thing is you have to expose the dimensions if the request coming >>>> from >>>> >> a browser includes the dimensions. >>>> >> >>>> >> If you want to emulate what php is doing, it's easy enough. >>>> Basically >>>> >> this would be a template helper that registers a new route when >>>> found. >>>> >> >>>> >> // load the createHash function from the crypto module >>>> >> var createHash = require('crypto').createHash; >>>> >> >>>> >> // Keep a history of registered routes >>>> >> var resizes = {}; >>>> >> // Store an index by hash for url routing >>>> >> var hashes = {}; >>>> >> // Register a new resize command, export this as a template helper. >>>> >> function resize(path, width, height) { >>>> >> var key = path + width + "x" + height; // convert args to a unique >>>> >> string >>>> >> if (resizes[key]) return resizes[key].url; // Check cache to see >>>> if it's >>>> >> already registered >>>> >> var hash = createHash("md5").update(key).digest("hex"); // >>>> calculate the >>>> >> md5 hash of the key to hide the params >>>> >> var entry = { >>>> >> url: "/images/" + hash + ".png", >>>> >> path: path, >>>> >> width: width, >>>> >> height: height >>>> >> }; >>>> >> // Store the object in the two tables. >>>> >> resizes[key] = entry; >>>> >> hashes[hash] = entry; >>>> >> // return the url. >>>> >> return entry.url; >>>> >> } >>>> >> >>>> >> >>>> >> Then later in your http request handler, add a route to handle these >>>> >> requests. >>>> >> >>>> >> app.get("/images/:hash.png", function (req, res) { >>>> >> var entry = hashes[req.params.hash]; >>>> >> if (!entry) return doErrorHandling(); >>>> >> resizeImage(entry, function (err, resizedPath) { >>>> >> if (err) return doErrorHandling(); >>>> >> }); >>>> >> }); >>>> >> >>>> >> And here is some untested code that does caching and batching of the >>>> async >>>> >> resize requests >>>> >> >>>> >> function resizeImage(entry, callback) { >>>> >> // Check if it's been resized already >>>> >> if (entry.resizedPath) { >>>> >> return callback(null, entry.resizedPath); >>>> >> } >>>> >> // Check if there is already a pending resize operation on this >>>> object >>>> >> if (entry.resizeQueue) { >>>> >> return entry.resizeQueue.push(callback); >>>> >> } >>>> >> entry.resizeQueue = [callback]; >>>> >> doRealResize(entry.path, entry.width, entry.height, function (err, >>>> >> resizedPath) { >>>> >> if (err) return callback(err); >>>> >> var callbacks = entry.resizeQueue; >>>> >> delete entry.resizeQueue; >>>> >> entry.resizedPath = resizedPath; >>>> >> callbacks.forEach(function (callback) { >>>> >> callback(null, resizedPath); >>>> >> }); >>>> >> }); >>>> >> } >>>> >> >>>> >> function doRealResize(path, width, height, callback) { >>>> >> // Do actual resize and return the final filename's filepath >>>> >> } >>>> >> >>>> >>> -- >>>> >>> Att, >>>> >>> Alan Hoffmeister >>>> >>> >>>> >>> >>>> >>> 2012/5/15 Duncan Gmail <duncananguswil...@gmail.com>: >>>> >>> > You can POST the size as well as use GET. On the numbers, just >>>> >>> > validate the input - you should be doing this anyway for all >>>> inputted data, >>>> >>> > in all languages. >>>> >>> > >>>> >>> > - MRdNk >>>> >>> > >>>> >>> > On 15 May 2012, at 15:21, Alan Hoffmeister < >>>> alanhoffmeis...@gmail.com> >>>> >>> > wrote: >>>> >>> > >>>> >>> >> Marc, that would work, but I'm concerned about security... What >>>> if >>>> >>> >> someone access the url /images/100000/100000/avatar.jpg ? >>>> >>> >> >>>> >>> >> -- >>>> >>> >> Att, >>>> >>> >> Alan Hoffmeister >>>> >>> >> >>>> >>> >> >>>> >>> >> 2012/5/15 Marc Deschamps <md.fle...@gmail.com>: >>>> >>> >>> I've done something like this using express: >>>> >>> >>> >>>> >>> >>> app.get('/images/:width/:height/:filename', >>>> routes.images.resize); >>>> >>> >>> >>>> >>> >>> Work great, in html i can do: >>>> >>> >>> >>>> >>> >>> <img src="/images/70/70/avatar.jpg"/> >>>> >>> >>> >>>> >>> >>> -- >>>> >>> >>> Job Board: http://jobs.nodejs.org/ >>>> >>> >>> Posting guidelines: >>>> >>> >>> >>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >>>> >>> >>> You received this message because you are subscribed to the >>>> Google >>>> >>> >>> Groups "nodejs" group. >>>> >>> >>> To post to this group, send email to nodejs@googlegroups.com >>>> >>> >>> To unsubscribe from this group, send email to >>>> >>> >>> nodejs+unsubscr...@googlegroups.com >>>> >>> >>> For more options, visit this group at >>>> >>> >>> http://groups.google.com/group/nodejs?hl=en?hl=en >>>> >>> >> >>>> >>> >> -- >>>> >>> >> Job Board: http://jobs.nodejs.org/ >>>> >>> >> Posting guidelines: >>>> >>> >> >>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >>>> >>> >> You received this message because you are subscribed to the >>>> Google >>>> >>> >> Groups "nodejs" group. >>>> >>> >> To post to this group, send email to nodejs@googlegroups.com >>>> >>> >> To unsubscribe from this group, send email to >>>> >>> >> nodejs+unsubscr...@googlegroups.com >>>> >>> >> For more options, visit this group at >>>> >>> >> http://groups.google.com/group/nodejs?hl=en?hl=en >>>> >>> > >>>> >>> > -- >>>> >>> > Job Board: http://jobs.nodejs.org/ >>>> >>> > Posting guidelines: >>>> >>> > >>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >>>> >>> > You received this message because you are subscribed to the Google >>>> >>> > Groups "nodejs" group. >>>> >>> > To post to this group, send email to nodejs@googlegroups.com >>>> >>> > To unsubscribe from this group, send email to >>>> >>> > nodejs+unsubscr...@googlegroups.com >>>> >>> > For more options, visit this group at >>>> >>> > http://groups.google.com/group/nodejs?hl=en?hl=en >>>> >>> >>>> >>> -- >>>> >>> Job Board: http://jobs.nodejs.org/ >>>> >>> Posting guidelines: >>>> >>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >>>> >>> You received this message because you are subscribed to the Google >>>> >>> Groups "nodejs" group. >>>> >>> To post to this group, send email to nodejs@googlegroups.com >>>> >>> To unsubscribe from this group, send email to >>>> >>> nodejs+unsubscr...@googlegroups.com >>>> >>> For more options, visit this group at >>>> >>> http://groups.google.com/group/nodejs?hl=en?hl=en >>>> >> >>>> >> >>>> > >>>> > -- >>>> > Job Board: http://jobs.nodejs.org/ >>>> > Posting guidelines: >>>> > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >>>> > You received this message because you are subscribed to the Google >>>> > Groups "nodejs" group. >>>> > To post to this group, send email to nodejs@googlegroups.com >>>> > To unsubscribe from this group, send email to >>>> > nodejs+unsubscr...@googlegroups.com >>>> > For more options, visit this group at >>>> > http://groups.google.com/group/nodejs?hl=en?hl=en >>>> >>>> -- >>>> Job Board: http://jobs.nodejs.org/ >>>> Posting guidelines: >>>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >>>> You received this message because you are subscribed to the Google >>>> Groups "nodejs" group. >>>> To post to this group, send email to nodejs@googlegroups.com >>>> To unsubscribe from this group, send email to >>>> nodejs+unsubscr...@googlegroups.com >>>> For more options, visit this group at >>>> http://groups.google.com/group/nodejs?hl=en?hl=en >>>> >>> >>> -- >>> Job Board: http://jobs.nodejs.org/ >>> Posting guidelines: >>> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >>> You received this message because you are subscribed to the Google >>> Groups "nodejs" group. >>> To post to this group, send email to nodejs@googlegroups.com >>> To unsubscribe from this group, send email to >>> nodejs+unsubscr...@googlegroups.com >>> For more options, visit this group at >>> http://groups.google.com/group/nodejs?hl=en?hl=en >>> >> >> -- >> Job Board: http://jobs.nodejs.org/ >> Posting guidelines: >> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines >> You received this message because you are subscribed to the Google >> Groups "nodejs" group. >> To post to this group, send email to nodejs@googlegroups.com >> To unsubscribe from this group, send email to >> nodejs+unsubscr...@googlegroups.com >> For more options, visit this group at >> http://groups.google.com/group/nodejs?hl=en?hl=en >> > > > > -- > Yogesh Agrawal > +91-9351507770 > > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en