Iedereen die met een scripttaal aan het ***-en is, komt vroeg of laat file uploads tegen. Ik heb dan nog het geluk dat ik mijn eigen server heb, en alles zo in kan stellen als ik zelf wil...
Een voorbeeldje van mijn CGI / Prototype powered AJAX file-upload:

Mijn serverload tijdens het uploaden ligt rond de 0.03, dus zeer netjes al zeg ik het zelf
Ik haal uit de geposte data niet alleen de filename (zodat mijn klanten zien welk bestand ze momenteel aan het uploaden zijn), maar ook de bestandsgrootte. De status van de upload wordt door upload.cgi weggeschreven in een logfile, en via ajax calls haal ik die logfile binnen. Zodoende kan ik vervolgens weer de progressbar updaten. Dit idee is overigens gebaseerd op de file upload van http://encodable.com/tech/ajaxupload/ maar compleet herschreven zodat het aan mijn wensen voldoet. Bestandsnaam etc zit nog niet in hun versie, en ook de mogelijkheid om meerdere files te uploaden heb ik er zelf ingebouwd. Verder gebruik ik de prototype library voor mijn ajax calls en hun hadden een eigen ajax implementatie. Nu ondersteunen ze dit overigens wel, maar eerst nog niet.
Het probleem: je stelt in je config files een maximum file size in, maar hoe ga je dit je gebruikers vertellen? Stel dat je maximum file upload 50mb is, wat redelijk normaal is voor een gallery... Zeg je tegen je klanten dat ze maximaal 10 bestanden van 5mb kunnen uploaden, of zeg je dat ze 2 bestanden van 25mb mogen uploaden? Enfin, je snapt het probleem. Hoeveel file upload velden ga je maken?
Ik upload overigens niet via PHP, maar via CGI in combinatie met AJAX progressbar. De reden hiervoor is dat CGI geen instellingen heeft met betrekking tot max_execution_time etc.
Wat ik graag wil bereiken: Deze post heb ik gemaakt omdat ik denk een goed idee te hebben met betrekking tot file uploads, iets wat uitgewerkt kan worden tot een zeer gebruiksvriendelijk voorbeeld. Ik heb deze post niet gemaakt om van jullie vragen te krijgen hoe ik dingen gemaakt heb, of om mij te flamen dat ik file uploads van 50 meg toesta.
Mijn idee is als volgt: Wat als je nu één file upload field hebt. Mensen selecteren een bestand en het wordt aan de queueu gegeven, vervolgens kunnen ze een nieuw bestand selecteren Niets nieuws zul je denken, maar nu komt het: Mijn idee is om zodra mensen een bestand hebben toegevoegd aan de queue, een hidden form te submitten met enkel die file erin. Het script wat wordt aangeroepen geeft enkel en alleen de filesize terug. Ik denk dat je al snapt waar ik heen wil. Mensen kunnen zodoende net zolang files toevoegen totdat een van te voren vastgestelde limiet is behaald. Ik weet bijv. van CGI dat de content-length van te voren (voordat de file binnen is) bekend is.
Wat vinden jullie van het idee? Zou het kunnen werken? Is er misschien al zoiets? Ik hoop op serieuze reacties.
Een voorbeeldje van mijn CGI / Prototype powered AJAX file-upload:

Mijn serverload tijdens het uploaden ligt rond de 0.03, dus zeer netjes al zeg ik het zelf
Ik haal uit de geposte data niet alleen de filename (zodat mijn klanten zien welk bestand ze momenteel aan het uploaden zijn), maar ook de bestandsgrootte. De status van de upload wordt door upload.cgi weggeschreven in een logfile, en via ajax calls haal ik die logfile binnen. Zodoende kan ik vervolgens weer de progressbar updaten. Dit idee is overigens gebaseerd op de file upload van http://encodable.com/tech/ajaxupload/ maar compleet herschreven zodat het aan mijn wensen voldoet. Bestandsnaam etc zit nog niet in hun versie, en ook de mogelijkheid om meerdere files te uploaden heb ik er zelf ingebouwd. Verder gebruik ik de prototype library voor mijn ajax calls en hun hadden een eigen ajax implementatie. Nu ondersteunen ze dit overigens wel, maar eerst nog niet.
Het probleem: je stelt in je config files een maximum file size in, maar hoe ga je dit je gebruikers vertellen? Stel dat je maximum file upload 50mb is, wat redelijk normaal is voor een gallery... Zeg je tegen je klanten dat ze maximaal 10 bestanden van 5mb kunnen uploaden, of zeg je dat ze 2 bestanden van 25mb mogen uploaden? Enfin, je snapt het probleem. Hoeveel file upload velden ga je maken?
Ik upload overigens niet via PHP, maar via CGI in combinatie met AJAX progressbar. De reden hiervoor is dat CGI geen instellingen heeft met betrekking tot max_execution_time etc.
Wat ik graag wil bereiken: Deze post heb ik gemaakt omdat ik denk een goed idee te hebben met betrekking tot file uploads, iets wat uitgewerkt kan worden tot een zeer gebruiksvriendelijk voorbeeld. Ik heb deze post niet gemaakt om van jullie vragen te krijgen hoe ik dingen gemaakt heb, of om mij te flamen dat ik file uploads van 50 meg toesta.
Mijn idee is als volgt: Wat als je nu één file upload field hebt. Mensen selecteren een bestand en het wordt aan de queueu gegeven, vervolgens kunnen ze een nieuw bestand selecteren Niets nieuws zul je denken, maar nu komt het: Mijn idee is om zodra mensen een bestand hebben toegevoegd aan de queue, een hidden form te submitten met enkel die file erin. Het script wat wordt aangeroepen geeft enkel en alleen de filesize terug. Ik denk dat je al snapt waar ik heen wil. Mensen kunnen zodoende net zolang files toevoegen totdat een van te voren vastgestelde limiet is behaald. Ik weet bijv. van CGI dat de content-length van te voren (voordat de file binnen is) bekend is.
Wat vinden jullie van het idee? Zou het kunnen werken? Is er misschien al zoiets? Ik hoop op serieuze reacties.
[ Voor 3% gewijzigd door gvdh81 op 28-12-2005 18:02 ]