2010-04-19 2 views
5

Ho usato Uploadify nella mia applicazione PHP negli ultimi due mesi e ho cercato di rintracciare un bug sfuggente. Ricevo email quando si verificano errori fatali e mi forniscono una buona quantità di dettagli. Ne ho ricevuti dozzine Tuttavia, non sono stato in grado di riprodurre il problema da solo. Alcuni utenti (come me) non hanno alcun problema, mentre altri lo fanno.Perché alcuni dati POST scompaiono quando si utilizza Uploadify?

Prima di fornire i dettagli del problema, ecco il flusso.

  • Le visite utente modificano la schermata per una pagina nel CMS che sto utilizzando.
  • L'ID record per la pagina viene inserito in un modulo come valore nascosto.
  • L'utente fa clic sul pulsante Sfoglia di Uploadify e seleziona un file (è consentita solo la selezione di un singolo file).
  • Clic dell'utente Pulsante Invia per il mio modulo.
  • jQuery intercetta l'azione di invio del modulo, attiva Uploadify per avviare il caricamento e restituisce false per l'azione di invio (annullando manualmente l'evento di invio del modulo in modo che Uploadify possa prendere il sopravvento).
  • Carica caricamenti in uno script di processo personalizzato.
  • Uploadify termina il caricamento e attiva la richiamata di completamento JavaScript.
  • Il callback Javascript chiama $ ('# myForm'). Submit() per inviare il modulo.

Ora è quello che DOVREBBE accadere. Ho ricevuto segnalazioni di congelamento del caricamento al 100% e anche di altri in cui è visualizzato "Errore I/O".

Quello che sta succedendo è che il modulo viene inviato con il callback di completamento, ma alcuni parametri di post presenti nel modulo non sono semplicemente nei dati del post. L'id per la pagina, che prima ho detto viene aggiunto al modulo come campo nascosto, non è semplicemente lì nei dati del post ($ _POST) - non c'è nessun elemento per 'id' nell'array $ _POST. La cosa strana è che i dati del post contengono valori per alcuni campi. Ad esempio, ho un input di testo di tipo chiamato "nome" che è per il nome del record, e compare nei dati del post.

Ecco quello che ho raccolto:

  • Ciò sta accadendo su Mac OSX 10.5 e 10.6, Windows XP e Windows 7. posso postare esatte stringhe user agent se questo aiuta.
  • Gli utenti devono utilizzare Flash 10.0.12 o successivo. Abbiamo fatto in modo che il modulo ritorni a utilizzare un normale campo "file" se hanno < 10.0.12.

Qualcuno ha mai qualche idea su quale potrebbe essere la causa?

+0

+1 perché ho avuto gli stessi problemi con Uploadify. I client segnalano errori, in particolare con i caricamenti di immagini che restituiscono errori di I/O o il blocco. Impossibile riprodurre l'errore in fase di sviluppo - sicuramente non file/connessione connessa. – Jeriko

risposta

3
IOError: Client read error (Timeout?) 

Ho ricevuto lo stesso errore molto anche se il mio lato server è python/django. Ho pensato che fosse il client a scadere, ma guardando indietro con i log per te ora sembra che ci sia una coincidenza di questo arresto quando ho cambiato qualcosa nelle routine di autenticazione. È possibile che il server stia ricevendo il file ma poi si rifiuta di scriverlo nella memoria?

Inoltre, si è consapevoli del fatto che diversi client flash non inviano cookie? Bisogna aggirare il problema iniettando le chiavi di sessione nella variabile "scriptData" di uploadify.

x --------------------------------

Modifica. Questo codice python/django avvia la routine a cui uploadify si sottomette:

# Adobe Flash doesn't always send the cookies, esp. from Apple Mac's. 
# So we've told flash to send the session keys via POST. So recreate the 
# session now. Also facilitates testing via curl. 
cookie_name = settings.SESSION_COOKIE_NAME 
if request.member.is_anonymous() and request.POST.has_key(cookie_name): 

     # Convert posted session keys into a session and fetch session 
     request.COOKIES[cookie_name] = request.POST[cookie_name] 
     SessionMiddleware().process_request(request) 

# boot anyone who is still anonymous 
if request.member.is_anonymous(): 
    response['message'] = "Your session is invalid. Please login." 
    return HttpResponse(simplejson.dumps(response), mimetype='application/json') 
+0

Sì, stiamo iniettando i valori necessari tramite scriptData. Forse dovremmo provare a inviare anche l'id della sessione. Non sono sicuro di non scrivere. Qualcosa che devo controllare. –

+0

A meno che i client non siano omogenei, è necessario inviare le chiavi di sessione tramite scriptdata; non puoi fare affidamento su Flash per inviare cookie. Molte combinazioni non funzionano. Non riesco a ricordare in modo specifico, ma era come il flash in Mac + FF che inviava i cookie, ma flash in Mac + Safari non lo farebbe, o viceversa. Allo stesso modo, Windows ha combinazioni che Flash non invierà cookie. –

+0

Fondamentalmente quello che stiamo facendo è l'invio di parametri come "user_id: 1234, blah: 'something'". E poi, lo script di caricamento sta ricevendo quelli, e stiamo impostando manualmente i valori per $ _COOKIE, come questo: $ _COOKIE ['user_id'] = $ _POST ['user_id']. Questo ha funzionato finora ... forse questo non avrebbe funzionato tutto il tempo? –

0

Uploadify potrebbe modificare il modulo. Dai un'occhiata all'albero HTML/DOM del modulo nel momento in cui uploadify ha finito e sta chiamando il callback.

0

Hai provato a utilizzare Live HTTP Headers in Firefox per vedere se c'è qualche tipo di riscrittura che sta causando la perdita dei dati dei post?