Domanda

Sto lavorando su un websitwe e ho bisogno di un client per inviare mi hanno avvicinato a più di mille immagini. C'è un po 'di una distanza geografica tra noi, così mentre mailing un CD o una scheda SD non è impossibile, ma non è preferito. Posso scrivere un uploader PHP per avere il client inviare le immagini, o c'è un modo migliore? Non voglio iscrivermi a tutti i siti di condivisione di file.

Supponendo che sto scrivendo una tale uploader, c'è un modo per codificare un progresbar e / o alcune altre caratteristiche che proteggono contro i file danneggiati da caricare interrotto?

Tutti i link a risorse che aiutano sono un plus.

Grazie

EDIT:

Questa è una cosa di una volta e queste sono immagini di alta qualità di cui stiamo discutendo. Sara 'qualche GB.

Per FTP Spazio, si intende un nome utente e pwd al mio server FTP? Si può fare, ma (perché), un client FTP meglio di un uploader web based? Non sono sicuro che il cliente sa o vuole scaricare un programma FTP. Il client è su un Mac e non mi fido dei programmi FTP per Mac pochi che ho visto.

Supponendo che prendo il "tutto in un unico zip" percorso, sarà PHP lavoro?

Grazie di nuovo.

EDIT:

Va bene, finora sono stato convinto di non utilizzare PHP a meno che non usiamo i file .zip. Inoltre, io probabilmente nix la barra di avanzamento per ora. In attesa di cliente, tornerà a tutti nei prossimi giorni.

EDIT:

ha incontrato il cliente in una sorta di funzione. Il cliente aveva le foto c'è su un flash drive. Problema risolto. +1 per tutto l'input.

È stato utile?

Soluzione

direi impostare un certo spazio FTP o una condivisione WebDAV. Se non si può fare che poi vorrei caricare le immagini in un unico (o piccolo numero) dei file zip, piuttosto che cercare di trattare con centinaia di arrivi unici, che sarebbe molto in termini di tempo, come i browser solo selezionare un singolo file in un momento in una finestra di upload di file (vale a dire non si può semplicemente selezionare un intero elenco di caricare).

Perché non usare PHP in questo caso:

Scrivere un semplice gestore di upload di file è facile in PHP, ma se si vuole gestire grandi arrivi è piuttosto un tricker po 'come si sarà necessario diffidare dei limiti Carica file di dimensioni, limiti di tempo sceneggiatura excution e limiti di memoria. Può essere un po 'frustrante per impostare la prima volta.

Se è un file a più GB si desidera gestire poi un upload HTTP non è il modo in cui si vuole andare (sulla base, che se si deve chiedere perché, farlo funzionare come si desidera è destinata probabilmente ad essere molto frustrante processo per voi).

Ci sono diversi client FTP eccellenti su Mac OS, e non v'è alcun motivo per fidarsi di un browser web per essere meglio metodo di trasferimento di file di un client FTP.

Per quanto riguarda il supporto della barra di progresso:

Supporto currenly barra di avanzamento è molto limitata in PHP (al momento solo tramite moduli 3rd party che sono un po 'peloso) se I belive ci sia un piano per includere il modulo nella distribuzione standard. Googling per uploadprogress.so dovrebbe dare alcuni risultati rilevanti.

In risposta a Littlegreen:

Ho usato questa estensione http://pecl.php.net/package/uploadprogress (che è riuscita a entrare in conflitto con almeno un'estensione avevo installato già - anche se penso che hanno fissato tale questione ora) e ha scritto un costume javascript handler ( http://iaincollins.com/javascript/FileUploader.js ) sulla base di alcuni esempi più sul web, nel tentativo di integrare il meglio di ciascuno. per esempio. L'utilizzo di un iframe invisibile per restituire l'avanzamento del caricamento in modo trasparente, la creazione di una finestra di upload di dialogo file di DHTML e sostituendo il controllo di caricamento di file basato brutto del browser, rendendo più trasparente e sovrapponendo sulla parte superiore del mio controllo (così è stato ancora cliccabile, come si può 't richiamare la finestra di caricamento di file da JavaScript, anche se è possibile ottenere il nome del file che è stato selezionato per l'upload). Ottenere il giusto CSS styling è stato particolarmente importante per questo -. È abbastanza specifico browser

Il JS che ho scritto è purtroppo molto situazione specifica, ma potrebbe avere qualche elemento utile - mi dispiace non ho niente pubblico che posso creare un collegamento a come è stato creato per un'interfaccia privata.

Vedo che c'è un plugin jQuery per uploadprogress ora - non fa tutto, ma sarebbe un buon inizio: http://nixbox.com/demos/jquery-uploadprogress.php ... ricordo esempi migliori di essere là fuori, tra cui uno che ha gestito caricamento di file multipli (da loro code e l'esecuzione in sequenza -. si aveva ancora di selezionare un file alla volta), ma purtroppo non riesco a trovarli

Conclusione:

Vorrei cercare di evitare il fastidio e fare qualcosa di simile spazio FTP o un privato / peer to peer applicazione di trasferimento di file a meno che non si ha il tempo.

File Transfer Protocol (come dice il nome) è specificamente progettato per la grande trasferimento di file ed è una scelta migliore in quanto avrà bisogno di po 'di configurazione (non incorrere in limiti delle risorse) e si può ragionevolmente aspettarsi il cliente di avere FTP supporto resume, supponendo che il server non (cioè se le bancarelle di download, che dovrebbe essere facilmente in grado di riprendere da dove avevano lasciato, piuttosto che partire da zero come avrebbero a che fare conun caricamento HTTP basata su file PHP).

Mentre HTTP ha la capacità di gestire il caricamento dei file non è così robusta, e vari limiti delle risorse (nel server web, e in PHP - come detto sopra) avrebbe bisogno di essere configurato in modo esplicito per rendere il caricamento di un file a più GB possibile. Anche con WebDAV (usando HTTP recidere un file system remoto) è trasparente, ma tende a non essere così robusta come FTP, principalmente a causa di implementazioni client buggy - in particolare ci possono essere problemi durante il trasferimento di file molto grandi sia su Windows e Mac OS, anche se è in genere bene per il trasferimento di file di piccole dimensioni (ad esempio <500 MB).

Come nota a margine, la specifica HTML5 migliorerà come il caricamento dei file vengono gestite - con la possibilità di caricare più file contemporaneamente, e con la lima caricare il progresso come parte della specifica, ma per ora non è davvero un'opzione <. / p>

Altri suggerimenti

Vorrei suggerire FTP, con il motivo è che si può fare caricamenti collettivi, avviare gerarchia di cartelle / pausa / stop e conservare (se necessario). Le soluzioni FTP per Mac sono grandi; Io uso Trasmissione e Cyberduck. Filezilla è anche un bene.

Un'altra opzione FTP sarebbe per il vostro cliente di utilizzare il suo Mac per impostare un server FTP locale, da cui è possibile scaricare le foto. Ciò richiede un po 'di configurazione, ma è sicuramente possibile.

In ogni caso, io non consiglierei un caricamento di file basato su browser per questa quantità di file. Se si carica loro uno per uno (o anche in batch), è molto probabile che per creare un sacco di problemi per il vostro cliente . PHP di parametri POST e caricare file di limiti di dimensioni farà la compressione di tutte le immagini in un unico archivio difficile, e il trasferimento di file di grandi dimensioni possono causare problemi di timeout, come i browser non sono generalmente in grado di gestire Sospensione e ripresa.

L'eccezione a uploads basate su browser è quello di utilizzare un file uploader Flash-based, come ad esempio SWFUpload . Con esso, si può avere il client di selezionare tutti i file in una sola volta, dopo di che i file verranno messi in coda e caricati uno per uno allo script lato server (che può essere in PHP). In realtà, ho usato questo per lo stesso scopo di lasciare cliente mi inviare file.

Detto questo, mi raccomando ancora FTP in questo caso.

Trascurando il numero di file, la quantità di dati stiamo parlando?

Se sei preoccupato per il numero di file, basta avere il cliente li zip. È possibile decomprimere lo zip sul server e mettere le immagini ovunque hanno bisogno di andare.

Inoltre, chiedetevi se questo è un processo che sta per accadere con regolarità, o è un manutenzione irregolare o attività di avvio di una volta? Se è così, si risparmia se stessi e il vostro tempo e denaro del cliente, semplicemente scambiando i file via ftp o qualche altro metodo.

ho dovuto risolvere un problema simile per un cliente. Hanno regolarmente i loro clienti caricare un gruppo di file a loro, per un totale di 300-400MB, normalmente attraverso FTP. Tuttavia, un cliente ha avuto un firewall e non poteva usare FTP. E così ho dovuto codificare un uploader HTTP.

Ho cercato su Internet per una soluzione PHP e trovai fondamentalmente le stesse cose di Ian Collins già detto, 1) PHP è possibile ma pelosa e 2) il supporto Barra di avanzamento per PHP è male. Posso darvi un po 'più particolari, però, sui limiti di upload / dimensioni si dovrebbe andare bene finché si include un file .htaccess nella directory web contenente il codice seguente, che dovrebbe dare un limite di upload di 3GB e l'esecuzione di script illimitato il tempo fino a quando il hosting supporta l'impostazione di valori conf PHP nel file .htaccess:

php_value upload_max_filesize 3000M
php_value post_max_size 3000M
php_value max_execution_time 0
php_value max_input_time 0

Codifica uno script di caricamento è relativamente semplice. Un buon tutorial si trova qui .

Utilizzando una barra di avanzamento è più difficile. Una barra di avanzamento PHP-solo non è possibile senza l'installazione di estensioni. Un'opzione generalmente accettata è quella di utilizzare un ibrido / soluzione PHP Perl, che però richiede di essere in grado di eseguire script CGI sul server. Non posso, quindi ho lasciato la barra di avanzamento fuori. Questo è altamente cliente ostile, però, perché è a fissare uno schermo non in movimento per un bel po 'di tempo, pensando che il browser ha bloccato, e se in qualche modo si chiude o perde la sua connessione a Internet, che sarà lui a dover ricominciare da capo.

Il caricamento di più file in una volta è anche difficile. Utilizzando un avanzato controllo di selezione del file e AJAX per aprire diversi sessione di upload simultaneo si potrebbe percorso una lunga strada, ma si sarebbe lasciato con lo stesso problema: quando viene a mancare a causa di qualche nome strano, disco pieno o connessione persa, il client devono ricominciare da capo, ma ci sarà un casino di file già presenti sul server. Codifica una soluzione facile da usare curriculum non è un compito facile. Io vi consiglio di lasciare che il cliente ZIP suoi file e caricarli in una massa.

Dal momento che questa è una cosa di una volta, vi consiglio di non perdere tempo con la scrittura la propria soluzione e utilizzare strumenti già disponibili. Perché non lasciate che il vostro client FTP uso, per esempio la versione Mac di FileZilla ? O DropBox ? O come circa lasciarlo caricare i file Google Documenti , che dal recente permette di caricare e condividere qualsiasi tipo di file fino a 100MB?

Si potrebbe considerare SWFUpload (http://code.google.com/p/swfupload/), che è una libreria di Flash e Javascript per rendere il caricamento di un molto più facile. Ha il supporto PHP e .Net fuori dalla scatola, quindi sarebbe probabilmente adattarsi bene alle vostre esigenze.

L'ho usato per un massimo di 1.000 immagini in una sola sessione di caricamento.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top