<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom"><title>Simon Willison's Weblog: uploads</title><link href="http://simonwillison.net/" rel="alternate"/><link href="http://simonwillison.net/tags/uploads.atom" rel="self"/><id>http://simonwillison.net/</id><updated>2010-06-02T15:57:00+00:00</updated><author><name>Simon Willison</name></author><entry><title>Parsing file uploads at 500 mb/s with node.js</title><link href="https://simonwillison.net/2010/Jun/2/parsing/#atom-tag" rel="alternate"/><published>2010-06-02T15:57:00+00:00</published><updated>2010-06-02T15:57:00+00:00</updated><id>https://simonwillison.net/2010/Jun/2/parsing/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://debuggable.com/posts/parsing-file-uploads-at-500-mb-s-with-node-js:4c03862e-351c-4faa-bb67-4365cbdd56cb"&gt;Parsing file uploads at 500 mb/s with node.js&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Handling file uploads is a real sweet spot for Node.js, especially now it has a high performance Buffer API for dealing with binary chunks of data. Felix Geisendörfer has released a new library called “formidable” which makes receiving file uploads (including HTML5 multiple uploads) easy, and uses some clever algorithmic tricks to dramatically speed up the processing of multipart data.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/binary"&gt;binary&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/buffers"&gt;buffers&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/nodejs"&gt;nodejs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uploads"&gt;uploads&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/recovered"&gt;recovered&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/felixgeisendorfer"&gt;felixgeisendorfer&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/files"&gt;files&lt;/a&gt;&lt;/p&gt;



</summary><category term="binary"/><category term="buffers"/><category term="html5"/><category term="javascript"/><category term="nodejs"/><category term="uploads"/><category term="recovered"/><category term="felixgeisendorfer"/><category term="files"/></entry><entry><title>Plupload</title><link href="https://simonwillison.net/2010/Feb/10/plupload/#atom-tag" rel="alternate"/><published>2010-02-10T12:53:11+00:00</published><updated>2010-02-10T12:53:11+00:00</updated><id>https://simonwillison.net/2010/Feb/10/plupload/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.plupload.com/"&gt;Plupload&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Fantastic new open source project from the team behind TinyMCE. Plupload offers a cross-browser JavaScript File uploading API that handles multiple file uploads, client-side progress meters, type filtering and even client-side image resizing and drag-and-drop from the desktop. It achieves all of this by providing backends for Flash, Silverlight, Google Gears, HTML5 and Browserplus and picking the most capable available option.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://blog.moxiecode.com/2010/02/03/plupload-released/"&gt;Moxiecode Developer Blog&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/browserplus"&gt;browserplus&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/flash"&gt;flash&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gears"&gt;gears&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/html5"&gt;html5&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javascript"&gt;javascript&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/plupload"&gt;plupload&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/silverlight"&gt;silverlight&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/tinymce"&gt;tinymce&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uploads"&gt;uploads&lt;/a&gt;&lt;/p&gt;



</summary><category term="browserplus"/><category term="flash"/><category term="gears"/><category term="html5"/><category term="javascript"/><category term="plupload"/><category term="silverlight"/><category term="tinymce"/><category term="uploads"/></entry><entry><title>Django File Uploads</title><link href="https://simonwillison.net/2008/Jul/1/uploads/#atom-tag" rel="alternate"/><published>2008-07-01T17:00:31+00:00</published><updated>2008-07-01T17:00:31+00:00</updated><id>https://simonwillison.net/2008/Jul/1/uploads/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.djangoproject.com/documentation/upload_handling/"&gt;Django File Uploads&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
Nearly two years in the making, Django’s file upload capacity has received a major (and backwards incompatible) upgrade. Previously, files were uploaded by default in to RAM—now, files larger than 2.5MB are streamed to a temporary file and extensive hooks are provided to customise where they end up—streaming to S3, for example.

    &lt;p&gt;&lt;small&gt;&lt;/small&gt;Via &lt;a href="http://code.djangoproject.com/changeset/7814"&gt;Changeset 7814&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/django"&gt;django&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/fileuploads"&gt;fileuploads&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/s3"&gt;s3&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uploads"&gt;uploads&lt;/a&gt;&lt;/p&gt;



</summary><category term="django"/><category term="fileuploads"/><category term="s3"/><category term="uploads"/></entry><entry><title>Evil GIFs: Partial Same Origin Bypass with Hybrid Files</title><link href="https://simonwillison.net/2008/Jul/1/evil/#atom-tag" rel="alternate"/><published>2008-07-01T08:58:45+00:00</published><updated>2008-07-01T08:58:45+00:00</updated><id>https://simonwillison.net/2008/Jul/1/evil/#atom-tag</id><summary type="html">
    
&lt;p&gt;&lt;strong&gt;&lt;a href="http://radar.oreilly.com/archives/2008/06/partial-same-origin-bypass-wit.html"&gt;Evil GIFs: Partial Same Origin Bypass with Hybrid Files&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;
First there were PNGs that had crossdomain.xml files embedded in them, now there are GIFs that contain Java applets (as JAR files). At this point I’d say don’t even bother trying to validate uploaded files, just make sure they’re served off an entirely different domain instead where XSS doesn’t matter.


    &lt;p&gt;Tags: &lt;a href="https://simonwillison.net/tags/applets"&gt;applets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/crossdomainxml"&gt;crossdomainxml&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/gifs"&gt;gifs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/javaapplets"&gt;javaapplets&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/pngs"&gt;pngs&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/security"&gt;security&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/uploads"&gt;uploads&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/validation"&gt;validation&lt;/a&gt;, &lt;a href="https://simonwillison.net/tags/xss"&gt;xss&lt;/a&gt;&lt;/p&gt;



</summary><category term="applets"/><category term="crossdomainxml"/><category term="gifs"/><category term="javaapplets"/><category term="pngs"/><category term="security"/><category term="uploads"/><category term="validation"/><category term="xss"/></entry></feed>