Not able to found any async image resize code in dropup

On Wed, May 16, 2012 at 6:03 PM, Anand George <[email protected]>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 <[email protected]> wrote:
>
>>
>>
>> On Wed, May 16, 2012 at 6:14 AM, Alan Hoffmeister <
>> [email protected]> 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 <[email protected]>:
>>> > 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 <[email protected]>
>>> wrote:
>>> >>
>>> >>
>>> >>
>>> >> On Tue, May 15, 2012 at 2:46 PM, Alan Hoffmeister
>>> >> <[email protected]> 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 <[email protected]>:
>>> >>> > 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 <
>>> [email protected]>
>>> >>> > 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 <[email protected]>:
>>> >>> >>> 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 [email protected]
>>> >>> >>> To unsubscribe from this group, send email to
>>> >>> >>> [email protected]
>>> >>> >>> 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 [email protected]
>>> >>> >> To unsubscribe from this group, send email to
>>> >>> >> [email protected]
>>> >>> >> 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 [email protected]
>>> >>> > To unsubscribe from this group, send email to
>>> >>> > [email protected]
>>> >>> > 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 [email protected]
>>> >>> To unsubscribe from this group, send email to
>>> >>> [email protected]
>>> >>> 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 [email protected]
>>> > To unsubscribe from this group, send email to
>>> > [email protected]
>>> > 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 [email protected]
>>> To unsubscribe from this group, send email to
>>> [email protected]
>>> 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 [email protected]
>> To unsubscribe from this group, send email to
>> [email protected]
>> 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 [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> 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 [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to