[TYPO3-core] RFC #10639: Integration of mass file uploader

Dan Osipov dosipov at phillyburbs.com
Thu Apr 16 16:22:31 CEST 2009


I'm having some issues when testing... What should be the value of 
$TYPO3_CONF_VARS['BE']['fileExtensions']?


Dan Osipov
Calkins Media
http://danosipov.com/blog/

Benjamin Mack wrote:
> Hey team,
> 
> this is a SVN patch request.
> 
> Branches: trunk only
> 
> BT reference: http://bugs.typo3.org/view.php?id=10639
> 
> RFC Type: New feature (yay!)
> 
> 
> == Problem
> If you currently want to upload a bunch of files into your filelist 
> module, you'd rather use FTP or a Java-based extension than the current 
> upload module where you need to select each file manually. The selection 
> of only one file per <input type="file"...> is a browser limitation. 
> This way it's a pain in the butt to upload multiple files at once 
> (use-case: like 50 images for a new image gallery, not that uncommon, 
> right?). So I thought of a better solution.
> 
> 
> == Solution
> To overcome the browser limitations, you can use flash to select 
> multiple files at once in the "select files" dialog when uploading. 
> There are several opensource flash tools out there that provide a simple 
> Flash file and a JS script wrapping around it. Just as an FYI: About 97% 
> of all users [1] have flash enabled in their browsers.
> 
> One of the most prominent solutions for handling multiple uploads is 
> called "SWFupload" [2] having a MIT license. It uses an event-based 
> approach that replaces an existing DOM element with a flash movie. Once 
> you click on it (Flash 10 requires you to click on the movie to start 
> the event-process), it shows the "Select files" dialogue. It then starts 
> to upload each file one after another.
> I then created a wrapper to put the Flash uploader in a ExtJS 
> environment window, so we can use all the fancy stuff like a EXT 
> progressbar JS object and also the event handling that can be used from 
> every module iframe, thus allowing to call back to the actual frame, 
> once the global process is done.
> Once all uploads are done, the Ext window is hidden and all existing 
> events that modules used to hook in, are cleared.
> 
> One design approach (in terms of code design) was that I wanted to make 
> it very simple (with only a few lines of code) to trigger the uploader, 
> having lots of the default options already set in the global instance. 
> This way people can add the uploader in a quick way in their own 
> extensions (or other places in the core) without having to deal with the 
> Flash instance at all.
> 
> The actual patch is quite easy to review, as it stripped out everything 
> else (like code cleanups and prerequisits) in earlier RFCs.
> It consists of the main extJS wrapper classes (I used the TYPO3 
> namespace for that) in typo3/js/flashupload.js. The first (and for now 
> only) use-case is in the filelist module (typo3/file_list.php). The 
> other changes are adding the TYPO3 global object in javascript and the 
> localization, as well as the changes in the user setup.
> 
> 
> == Your questions
> * What happens to people if they don't have flash enabled in their browser?
> If they enable the Flash uploader in their options and they use a 
> browser with no flash then nothing happens. However for the future we 
> can think of a better solution detecting the Flash player at runtime and 
> then have it degraded whether Flash uploading works or not.
> 
> * Why is there only one instance of this dialog?
> * Why can't we run that upload in the background so editors can work 
> while uploading?
> Well, it's really tricky to deal with frames. So that's why we have a 
> global instance running in the backend.php page. If a module gets 
> reloaded the movie file still exists (and the browser doesn't crash - 
> this would happen if we'd have the uploader in every module). However, I 
> chose a modal approach for the dialog, because we start that global 
> instance of the Flash Uploader in a module. Through the 
> top.TYPO3.FlashUploader JS object you can add callbacks running in the 
> context of the module iframe (which is really cool, btw!), but if you 
> start navigating any further (and thus the context doesn't exist 
> anymore), the callback throws a JS error, because the context in that 
> module doesn't exist anymore. That's why I chose to only have one 
> instance running and nothing else is allowed while uploading, thus 
> elimiting lots of side effects.
> 
>  * Why didn't you take any existing extJS plugins that already implement 
> SWFUpload?
> They're GPLv3
> 
> * Dude, there are way better GUIs out there, to cancel every item in the 
> uploading queue etc, can we do something here?
> Yes, we can! However, I'd really like to address more important issues 
> first (Localization, Degration) and focus on the code, not design 
> improvements. Design etc can be discussed in the Design team and/or HCI 
> team.
> 
> == How to test the solution
> It's quite simple actually: Apply the patch to current trunk, extract 
> the zip file in the main directory (it'll add SWFupload in 
> typo3/contrib/) and then refresh your configuration cache (to enable the 
> AJAX call registration that was implemented a couple of revisions ago). 
> Then, in the User Setup, use the new option "Enable Flash Uploader", 
> save the changes, go to the filelist module, select a folder and then in 
> the module, use the button in the docheader to start the uploader. The 
> upload window should pop up. Enjoy!
> 
> == Notes
>  * You have to explicitly enable the flash uploader on a per user basis 
> in the user setup, don't know if we should handle it in a different way.
>  * Localization is currently implemented with String.format() from extJS 
> and all the labels are in backend.php so it's globally available. 
> However it's not coming from an XML file yet, this will be done with a 
> separate patch once this is in (we already thought of extracting all the 
> labels in typo3-lang-fr.js, that file could be compiled at the same 
> point when we fetch the translations from the translation server. 
> Details & discussions for this will follow soon on the 4.3 list)
>  * This feature was sponsored by AOE Media! Thanks!
> 
> 
> Next steps (once we have a safe bet on this patch):
>  * Update NEWS.txt file (with the commit)
>  * I really need to get some documentation up for people wanting to 
> integrate this in their own extensions, or to integrate it even more 
> tightly into other places in the core.
>  * Activate uploader when using the clickmenu in the file menu and the 
> TCEforms.
>  * Move Localization into a base XML for Javascript, and at a later 
> stage move compiled JS files into , write documentation on how to handle 
> JS localization, so extension developers can hook into it here.
> 
> 
> All the best,
> Benni.
> 
> 
> [1] 
> http://www.statowl.com/flash.php?1=1&timeframe=last_6&interval=month&chart_id=13&fltr_br=&fltr_os=&fltr_se=&fltr_cn=&chart_id= 
> 
> [2] http://swfupload.org/
> 


More information about the TYPO3-team-core mailing list