a
NeatUpload™ News


NeatUpload-1.3.13 contains major bug fixes and a couple new features that could be added without changing the existing code.  Specifically, it:
  • fixes a bug where earlier uploads from a page sometimes interfered with new uploads from a copy of the page cached by the browser.
  • fixes a bug where NeatUpload would fail when cookieless sessions were used.
  • fixes the very old issue where inline ProgressBars were converted to popup ProgressBars under Opera.
  • fixes a bug which caused many more (2x) progress requests than were necessary.
  • fixes a bug where the handlerUrl attribute of the SessionBasedUploadStateStoreProvider and the AdaptiveUploadStateStoreProvider would not accept a fully qualified URL, causing those providers to be useless in an environment where the application can not be accessed using the same hostname from both the server and the browser.
  • adds ProgressJsonHandler.ashx which returns the state of the upload as JavaScript Object Notation (JSON).
  • adds an example of using ProgressJsonHandler.ashx from a static HTML page.
  • includes minor documentation fixes.
To upgrade, copy over the new dlls and the contents of the NeatUpload subfolder.






Statistics
Entries (79)
Comments (48)


About the NeatUpload™ ASP.NET Component

The NeatUpload ™ ASP.NET component allows  developers to stream uploaded files to storage (filesystem or database) and allows users to monitor upload progress. It is open source and works under Mono's XSP/mod_mono as well as Microsoft's ASP.NET implementation. It features several custom controls, including:

Features

  • Works in web gardens and web farms.
  • Works under medium trust environments when installed in the GAC.
  • Works under Mono's XSP/mod_mono and Microsoft's ASP.NET 1.1 or higher.
  • Easy to install and use.  Add the UploadHttpModule to the <httpModules> section of your Web.config and drag-and-drop the controls using the Visual Studios Web Forms Designer.
  • ProgressBar control can display processing progress in addition to upload progress.
  • ProgressBar control uses AJAX-style refreshless updates on modern browsers when JavaScript is available, but also allows users without JavaScript to see upload progress.
  • Allows customization through styles, custom progress display pages, UploadStorageProviders, and UploadStateStoreProviders, and provides an API for creating your own file upload and progress controls.
  • Falls back to using ASP.NET's HttpPostedFile if the NeatUpload UploadHttpModule is not present.  This makes it easy to remove the HttpModule if for some reason it causes problems.
  • Streams uploads directly to storage.  This conserves server memory, allows larger uploads, and helps prevent Denial of Service attacks.
  • Removes uploaded files when an error occurs.  This helps prevent disk space leakage.
  • Licensed under the Lesser General Public License (LGPL), a business-friendly open source license.  See below for details.

Demo

Check out the live demo!

Download

For the most recent stable version, download NeatUpload-1.3.13.zip or NeatUpload-1.3.13.tar.gz.  The download files include both source and precompiled binaries.  You can also get the most recent development snapshot, by downloading either NeatUpload-trunk.926.zip or NeatUpload-trunk.926.tar.gz.

The latest  code is always available from the Subversion repository.  You can browse it with your web browser or use a subversion client with a command like this:
svn checkout https://forgesvn1.novell.com/svn/neatupload/trunk

NeatUpload-1.2 users that don't wish to upgrade should download  NeatUpload-1.2.30.zip or NeatUpload-1.2.30.tar.gz.

Documentation

Please read the NeatUpload-1.3 Manual for step-by-step installation and usage instructions.  Some API documentation is also available.  (The NeatUpload 1.2 Manual, NeatUpload 1.1 Manual and NeatUpload 1.0 Manual remain available for users that have not yet upgraded).

Support

If you are having problems getting NeatUpload to work, please post to the Help forum.  If you are confident you've found a bug, please post it to the Bugs forum.  If you have a feature request, please post it to the Features forum.

Feedback

If you are interested in paying for specific improvements to NeatUpload or paying to have it adapted it to your needs, please contact me.  Alternatively, if you would like to support my work on NeatUpload and other open source software more generally, consider sending me money.  I also greatly appreciate non-monetary contributions such as patches or comments about your experiences using NeatUpload.

Credits

NeatUpload would not have been possible without the support I received from many people.  A special thanks to:
  • Joakim Wennergren of Hitone Nordic AB (Sweden) for contributing the SqlServerInputFile extension which streams uploads to an SQL Server database.
  • ForeverStor for funding development of the HashedInputFile extension and reporting a long-standing but rare file corruption bug.
  • Joe Audette for his support, patience, and encouragement.  Joe tested countless early versions on MS ASP.NET, contributed VS.NET projects/solutions, and created the awesome mojoPortal, for which NeatUpload was originally designed.
  • Stefano Straus for contributing bug fixes and code for new features.  Stefano is using NeatUpload in the Tustena CRM system.
  • Mike Lockyer for spending a lot of time testing NeatUpload's designer support with Visual Studio.
  • Jamie Howell with starnow.com, and Michael Teper with Elanex, Inc., for reporting and testing the fix for a bug which could cause disclosure of sensitive information.
  • Amir Setoudeh at printrunner.com for helping diagnose a tricky bug with handling error pages.
  • John Myczek with Inter-Tel for reporting a buffering problem when using TransmitFile() and testing the fix.
  • Titan Fu for providing an ASP.NET 1.1 testbed, internationalization fixes, and other feedback.
  • Michel Roy (roy dot michel at gmail dot com) for reporting several bugs and suggesting fixes and improvements.
  • Chris Hynes at Assisted Solutions for SlickUpload, which was the inspiration for NeatUpload.  I didn't copy any of SlickUpload's code, but trying to get SlickUpload to work under XSP and mod_mono helped me better understand the problem and, in the end, develop a rather different solution.
  • the developers of Mono for providing an open source .NET-compatible platform on which to develop NeatUpload.  The ability to look through the source code was critical to overcoming the lack of good documentation on how to use some of the darker corners of ASP.NET.
  • the developers of log4net for providing such an easy-to-use logging framework.  This was critical because the Mono debugger doesn't yet support debugging web apps.
  • my wife, Jennifer, and our kids, Julia and Joshua, for letting me have a lot of "peace and quiet" to work on NeatUpload.

License

The NeatUpload™ ASP.NET component is Copyright (C) 2005 Dean Brettle and is licensed under the Lesser General Public License (LGPL).  That means that it is possible to link it into applications that are released under most other licenses, including proprietary licenses.  What follows is my interpretation of the LGPL as it applies to NeatUpload.  I am not a lawyer, and if anything below contradicts the LGPL, the LGPL takes precedence.

There are 3 types of use: use on your own web site, distributing an application which includes an unmodified NeatUpload dll, and distributing exes and dlls which include code derived from NeatUpload.

If you are just using NeatUpload for your own personal or commercial site, but you aren't distributing it, you don't need to do anything.  Of course an acknowledgment or link back to the NeatUpload home page is always appreciated.

If you are distributing an app that includes the NeatUpload assembly built from unmodified source code and the app does not otherwise include code derived from NeatUpload, the easiest way to comply with the LGPL is to:
  1. Include a copy of the NeatUpload release zip file you are using.  The zip file includes the source code for NeatUpload.
  2. Give prominent notice with each copy of the app (a) that NeatUpload is used in it, and (b) where to find the release zip file you included.  Include the notice wherever your application displays it's copyright information during operation.  So, for example, if your app has an "About" link that displays a page that says something like "(C) 2008, You Company.  All rights reserved..."  Then you would need to add the notice to that page.  If your app doesn't display copyright information, but you provide a user's manual, it is sufficient to clearly provide the notice in the manual.  If you don't provide a manual, putting the notice in a LICENSE-NeatUpload.txt file in a conspicuous place is sufficient.  The idea is that your customers need to be able to find the notice easily if they are looking for copyright information once they are using your app.  The notice could look something like:
This application uses NeatUpload which is covered by the Lesser General Public License.  The source code for NeatUpload is included in the following location: ...

If you are distributing an app that includes an exe or dll containing code derived from NeatUpload, the easiest way to comply with the LGPL is to:
  1. Avoid introducing dependencies on proprietary code.  For example, do not modify NeatUpload such that it references an assembly in your proprietary app.
  2. Add a prominent notice to the files you modify stating that you changed the files and the date of the change.
  3. Include the complete source code for the dll or exe, licensed under the terms of the LGPL.  NOTE: Although I certainly appreciate being notified of any modifications, from a license compliance perspective, you are responsible for providing the modified source to your customer.
  4. Give prominent notice with each copy of the app (a) that a derivative of NeatUpload is used in it, and (b) where to find the included source code.  Include the notice wherever your application displays it's copyright information during operation.  So, for example, if your app has an "About" link that displays a page that says something like "(C) 2008, You Company.  All rights reserved..."  Then you would need to add the notice to that page.  If your app doesn't display copyright information, but you provide a user's manual, it is sufficient to clearly provide the notice in the manual.  If you don't provide a manual, putting the notice in a LICENSE-NeatUpload.txt file in a conspicuous place is sufficient.  The idea is that your customers need to be able to find the notice easily if they are looking for copyright information once they are using your app.  The notice could look something like this:
This application uses assemblies that include code from NeatUpload which is covered by the Lesser General Public License. The source code for those assemblies is included in the following location: ...

If you have any licensing questions, just post them to the Support forum.  If you are unable to use NeatUpload because of it's license, please let me know. We might be able to work something out.



a

Forum Total Threads Total Posts Last Post
Help
784 3828 6/28/2009 3:37:47 PM
Bugs
89 473 6/29/2009 1:55:51 PM
Feature Requests
70 356 5/20/2009 1:52:57 PM
Comments
26 70 3/26/2009 4:23:23 AM