Why Are Web Uploads So Painful?

Call me naive, but isn’t this what FTP is for? It sure seems that an FTP extension/enhancement to the browser would be the ticket.

well, yes, it sucks, except of when you live in sweden where I had about 500kilobytes per second upstream with a normal home user connection… but back in switzerland the upstream really is sadly crippled :frowning:

Dudes, all I can say is http://digitarald.de/playground/uplooad.html :slight_smile:

Greg

Reporting stats from the browser can always be better. I totally agree. A standard way to implement resumable uploads is a long way off.

In order for a POST to continue an upload, the browser needs to know not to encode and send the beginning of a file. The multipart/form-data post that browsers support do not allow this. I could tell a user that they only send a partial file, but I wouldn’t be able to request the second half because there is no way for them to send just that part.

Also, there is a security risk in allowing a server to specify which file from a users machine it would like partial data from. The server would have to rely on the user to verify that they want to send the rest of the file and hope they selected the correct file.

I image the best solution would be if a browser needed to send a file, the protocol could first send a hash of the file to be uploaded so the server could determine if it only needed some of the data, then report back which section it needed and let the browser send only that part. This would involve two POST requests and a change to the protocol.

The HTTP protocol and HTML form spec would have to be expanded to allow for resumable uploads. Current solutions are going to have to use AJAX, Flash or some other plugin or downloadable control, which means browser and os compatibility issues.

I agree that uploading has been neglected and that browsers can and should do more, i guess the reason is that many people dont use it a great deal if ever. Also its going to take along time before upload speeds increase to current download speeds, that would require fiber-to-the-door, or alike, since current tech (ADSL) is only capable of about 1Mbps upstream, altough most get half that (at leaar from my experience here in the uk)

Amazon has a pretty decent upload UI on its video reviews creation page. It provides bytes uploaded so far, a percentage, and gives a time remaining estimate. It looks like its pure JS.

http://www.amazon.com/gp/customer-reviews/create-review

(click the “Video Review” radio button, near the middle of the page)

I know I’m nitpiking, but people keep saying POST. The proper operation for file upload is PUT. Of course, PUT is not supported by modern browsers, which I think may be contributing to the lack of support for resumable uploads. http://cafe.elharo.com/web/why-rest-failed/

Most people have highly asymmetric internet connections: massive download bandwidth…

I wish :frowning:

I agree with Jim. The answer is probably FTP which, unlike HTTP, is specifically designed for two-way file transfer. Incidentally, all major browsers double as (simple) FTP clients. The question is how to integrate FTP file transfers with HTTP requests in a seamless manner. In any event, it would probably be easier than the current kludgey solutions, as long as all vendors would agree on a solution.

Eh, not according to Tim Berners Lee, who has written how upload was and should have been an integral part of the web browsing experience, going forth, from the early browser he tooled around with…

::I don’t believe you’re right in saying that web browsers have “failed us” in terms of uploads. Uploading was never an intent of web browsing and only a consequence of user-generated content and (forgive me) Web 2.0.

Hey Jeff,

We recently posted a Silverlight proof of concept app that resizes photos in the browser on the client before uploading:

http://fluxtools.net/

It’s only a matter of time before an effort is made to do the same for video!

Cheers,

  • Adam

Okay

facebook.com resizes and compresses images before sending

  • they use flash

http://digitarald.de/playground/uplooad.html

  • allows you to upload many files at once AND gives you a progess indicator. The only thing it doesn’t do is resume broken uploads.
  • it uses flash

see a pattern?

Flash isn’t broken. !! :slight_smile:

While down here with my dial up connection, downloads fail all the time. I have to use getright/wget for any thing larger than a couple of hundred kbs, or I end up with a failed download. Upload is less painful, if anything.

Storing partial uploads on the server shouldn’t be a concern since they are designated to store the entire file anyway. Now it’s just a question of file identity.

But then again, it’s obviously no surprise that, as has been said before, the hypertext transfer protocol isn’t a particularily useful file transfer protocol.

But it can be extended to be one: a lot of storage sites do provide WebDAV access.

And of cause, there is HTTP PUT.

Pownce (http://www.pownce.com) has a pretty nice upload system. It gives real time status with a progress bar. However unless you go pro you are limited to 10MB uploads. I believe it is still invite only so if you would like an invite just ask.

I have to echo people from above. I started using the internet back in the Gopher/JANet days.

For uploads ftp is the only real way.

The problem with uploads is that HTTP was not meant for doing uploads. As was mentioned in this article. I share all my family pictures and videos using dropshots (www.dropshots.com). They have an application that you does the uploads, that is completely separate from your browser. Sure it’s yet another application to install, but it makes everything much easier. Just select the pictures and videos you want to upload from windows explorer (the file manager, not IE) and drop then on the upload window. Everything is done for you. The videos are converted to the proper format on your machine, so uploads are small, and it displays a nice little progress bar. I haven’t examined the protocol, but I assume it isn’t using HTTP to send the videos.

Mr. HTTP - I think you’re wrong (or at least I’m not 100% sure what you meant when you said “Browsers do not send the full size of the upload from beforehand”. I’m not sure what you mean by “beforehand” since HTTP is a stateless protocol. In vanilla HTML files are uploaded from the browser by a HTTP POST. All major browsers include a “Content-Length” header as part of the POST request. Although this is the length of all the fields in the post (for example if you had some checkboxes/radio buttons/text boxes on the form that was POST’ed the size of this data will also be included in the Content-Length). For most file upload cases the size of the file being uploaded dwarfs any other fields in the post, so you can take it as being very close to the size of the file being uploaded.

My real beef with file upload as a developer is that there is no “nice” way on the client to restrict the size of the file upload in vanilla HTML. none of the major browsers honour RFC 1867 which says “If the INPUT tag includes the attribute MAXLENGTH, the user agent should consider its value to represent the maximum Content-Length (in bytes) which the server will accept for transferred files.” I guess they can be forgiven since the HTML 3.2 spec says that the maxlength attribute can be used to restrict the length of the file NAME!!! (how helpful is that). This (AFAIK) is why most major sites that deal with file upload use flash, because the flash file upload widget gives access to the size of the upload via script, and thus you can prevent users trying to upload their entire DVD collection to your site by mistake. The following site has a nice analysis of the file input HTML widget http://www.cs.tut.fi/~jkorpela/forms/file.html at least now we’ve developed decent approaches to styling the file inputs http://www.quirksmode.org/dom/inputfile.html

I alwyas reencode my videos before uploading.

My digital camera makes 848x480 or 640x480, 30 FPS in Quicktime format. Considering how bad Quicktime is, the video is almost 2 MB per second.

What I always do is resize the video to 320x240, and reencode it with a better codec.

Check out http://www.mediafire.com/ for a decent upload status bar. It’s the best I’ve seen.