2013-06-05 9 views
5

Vorrei utilizzare FineUploader all'interno di una tipica forma:fine-uploader - come usare in combinazione con altri campi di input?

<form enctype="multipart/form-data" method="post""> 
    <input name="fileupload" type="file" "> 
    <input type="text" name="title" size="45" maxlength="100"> 
    <textarea name="description" cols="40" rows="8"></textarea> 
    <input type="hidden" name="op" value="Add"> 
<input type="submit" value="Upload"> 

Così mi sarebbe effettivamente desidera sostituire principalmente la parte <input name="fileupload" type="file" ">.

Purtroppo non ho molta familiarità con JavaScript e jQuery Jet e non ho idea di come farlo. Non sono riuscito a trovare alcun codice esemplificativo in cui FineUploader sia utilizzato insieme ad altri dati da inviare.

Apprezzerei qualsiasi aiuto!

Grazie Kashuda

+0

Ho bisogno di altre informazioni prima di poterti fornire una risposta. Innanzitutto, in base al tuo codice precedente, sembra che tu voglia solo che un utente sia in grado di selezionare UN file. È questa la tua intenzione? Secondo, stai anche cercando di consentire ai tuoi utenti di trascinare e rilasciare i file da caricare? –

+0

Ho diverse aree/categorie in cui gli utenti possono caricare file. Di solito caricano solo un file. Ma in un caso avrei bisogno di caricare due file. Uno dovrebbe essere un file di anteprima (.jpg), il secondo dovrebbe essere l'oggetto principale (.zip). Il trascinamento non è richiesto. Ciò di cui ho bisogno è il progresso del caricamento e un controllo del tipo di file e delle dimensioni dei file prima del caricamento. (Btw. Sto cercando le opzioni jQuery) – Kashuda

+0

Ci sono diversi modi per affrontarlo. Di conseguenza, la tua domanda richiede una risposta abbastanza complessa e dettagliata. Scriverò qualcosa di completo nelle prossime 6-9 ore. –

risposta

5

Mentre Belle Uploader non richiede jQuery (o qualsiasi altra libreria, se è per questo) si ha un optional jQuery plug-in. Se non ti opponi all'utilizzo di jQuery, ti suggerisco di utilizzare il plug-in jQuery, poiché jQuery rende la vita molto più semplice.

Ci sono un paio di modi per scuoiare questo gatto. In entrambi i casi, la formula è quasi la stessa. Cioè, lascia che Fine Uploader gestisca i file, crei elementi di input al volo per ogni file inviato e poi restituisca i valori di tali input a Fine Uploader appena prima che Fine Uploader invii il file associato al tuo server.

Opzione # 1 - Modalità FineUploader (utilizzando il pre-costruito UI)

Utilizzando FineUploader mode:

<div id="myFineUploaderContainer"></div> 
<button id="uploadSelectedFiles">Upload Selected Files</button> 

$('#myFineUploaderContainer').fineUploader({ 
    request: { 
     endpoint: '/my/upload/endpoint' 
    }, 
    autoUpload: false 
}) 
    .on('submitted', function(event, id, name) { 
     var fileItemContainer = $(this).fineUploader('getItemByFileId', id); 

     $(fileItemContainer) 
     .prepend('<input type="text" name="name">') 
     .append('<input type="text" name="description">'); 
    }) 
    .on('upload', function(event, id, name) { 
     var fileItemContainer = $(this).fineUploader('getItemByFileId', id), 
      enteredName = $(fileItemContainer).find('INPUT[name="name"]').val(), 
      enteredDescr = $(fileItemContainer).find('INPUT[namme="description"]').val(); 

     $(this).fineUploader('setParams', {name: enteredName, description: enteredDescr}, id); 
    }); 

$('#uploadSelectedFiles').click(function() { 
    $('#myFineUploaderContainer').fineUploader('uploadStoredFiles'); 
}); 

È probabile che sia necessario aggiungere al codice di cui sopra in base alle proprie esigenze, e contribuire CSS se del caso, ma questo è un inizio nella giusta direzione. In alto, stai aspettando che Fine Uploader ti richiami quando ha aggiunto l'elemento della lista al DOM che rappresenta un file selezionato. Quando si riceve la richiamata, si aggiunge un elemento di immissione del testo all'inizio della voce dell'elenco (per il nome fornito dall'utente) e un altro alla fine della voce dell'elenco (per la descrizione fornita dall'utente, quindi poco prima Fine Uploader invia il file al tuo server, invoca il gestore di eventi "upload", dove leggi i valori degli elementi di input e li mandi a Fine Uploader, associandoli al file tramite l'ID del file. Fine Uploader includerà queste informazioni insieme al file nella richiesta POST con codifica multipart che invierà al tuo server

Il gestore di clic segnalerà a Fine Uploader di inviare i file al server. L'utente farà clic su questo dopo aver selezionato tutti i file e riempito i campi di input come appropriato. Normalmente, Fine Uploader invia i file al server immediatamente dopo la loro selezione, ma questo può essere modificato da toggli ng l'opzione autoUpload. Per la tua situazione, ha più senso disattivare il caricamento automatico.

Utilizzando la modalità FineUploader significa che non c'è bisogno di preoccuparsi troppo per l'interfaccia utente, come la maggior parte di esso è stato fatto per te, e si ottiene la funzionalità drag drop &, insieme con le barre di avanzamento e altre chicche UI gratuitamente.

Opzione # 2 - Modalità FineUploaderBasic (costruire la propria interfaccia utente)

tua seconda scelta è quella di utilizzare FineUploaderBasic mode. Questo ti dà il massimo controllo sulla tua interfaccia utente, ma richiede il maggior lavoro in quanto avrai bisogno di creare interamente la tua interfaccia utente. Ciò significa che è necessario utilizzare la maggior parte dello callbacks per costruire l'interfaccia utente e mantenerla sincronizzata con lo stato interno di Fine Uploader e i file associati.

Ad esempio, se si desiderano barre di avanzamento, è necessario eseguire il rendering da soli e aggiornarle in base alle informazioni trasmesse periodicamente tramite un gestore di richiamata onProgress richiamato da Fine Uploader. Tutto ciò va bene e probabilmente è preferibile in alcuni casi se sei abbastanza a tuo agio con javascript, HTML e CSS. Se non lo sei, tuttavia, potresti provare a utilizzare la modalità FineUploader.

FineUploader La modalità Base non include il supporto per il trascinamento della selezione, ma è possibile integrare facilmente Fine Uploader's standalone File Drag & Drop module se lo si desidera.

+0

OK. Grazie per questa risposta completa. Tre cose non mi sono ancora chiare: 1.) Se l'utente decide di cambiare il file che vuole caricare DOPO che ha compilato tutti gli altri campi di input, questi campi vengono cancellati, poiché l'azione onSubmit viene richiamata di nuovo. 2.) Come aggiungerei un secondo pulsante di caricamento per la mia anteprima? 3.) Come caricare una nuova pagina dopo un caricamento riuscito? – Kashuda

+0

1) Non è chiaro che tu abbia capito come funziona questo Uploader. Ti suggerisco di provare la mia risposta. C'è un solo Uploader in totale per tutti i file. 2) perché vorresti due pulsanti di caricamento? Ancora una volta, non penso che tu capisca come funziona. Non ci dovrebbe essere bisogno di due pulsanti, solo un pulsante per tutti i file. 3) Carica una nuova pagina in un gestore "completo" dopo che tutti i file hanno completato la discussione completa. Guarda la documentazione per dettagli. –

+0

"Discutere completamente" sopra dovrebbe leggere "correttamente" –

Problemi correlati