2013-07-01 16 views
5

Potrebbe non esserci una risposta per questo, ma lo chiederò comunque, poiché non riesco a trovare nulla in Google. Ho un sito di caricamento file creato utilizzando principalmente php e HTML5. So che, usando il sistema chunking HTML5, posso fare una sorta di pausa e riprendere il caricamento del file controllando nel server quale pezzo è stato caricato. Ma richiedeva all'utente di provare a caricare lo stesso file per farlo funzionare.Ottieni percorso file completo utente per riprendere Caricamento file

Ora, mi chiedevo se ci fosse comunque, per ottenere il percorso completo del file dell'utente, durante la prima volta che l'utente tenta di caricare quel file, in modo che io salvi quel percorso nel database. se qualcosa è accaduto, nel sito posso solo dire all'utente clicca qui per riprendere (allora dato che ho il percorso del file, posso solo inviare automaticamente, invece di richiedere all'utente di provare a sfogliare di nuovo quel file).

So che se si utilizza java siamo in grado di farlo (utilizzando un certificato firmato), ma è comunque possibile utilizzare php o javascript o html5 preferibili per poterlo fare. Sto cercando di evitare java. O forse qualsiasi altra lingua?

NOTA: questo file di caricamento è per un caricamento enorme (che va da 1 MB - 4 GB di file) e finora funziona perfettamente bene. Sto solo cercando di aggiungere funzionalità di pausa/ripresa a questo progetto.

Non mi importa di comprare certificato o SMTG di fiducia per far funzionare tutto

O c'è comunque, magari per utilizzare Silverlight per ottenere il percorso del file, e poi dopo ho il percorso del file, autosubmit in forma html per il mio php per funzione di ripristino elaborata la pausa

Grazie

+4

Non sarà in grado di ottenere il percorso del file con JS – romo

+0

javascript restrizioni di sicurezza impediranno una tale cosa. consentire al codice lato server di specificare un file lato client per il caricamento consentirebbe a un server malevolo di provare e caricare ** QUALSIASI ** file sul computer client su cui il server conosceva un percorso. –

+2

poiché l'handle del file verrà interrotto in una ricarica, è necessario prima archiviare i dati del file localmente, localStorage per file di piccole dimensioni, indexedDB per quelli grandi. puoi quindi riprenderti dalla cache anziché dal file. – dandavis

risposta

1

È possibile utilizzare FileReader e una sorta di memoria locale per memorizzare l'immagine localmente e caricare dalla cache. Ho scritto un esempio per un problema simile con sessionStorage qui: Get complete filepath for cached images

var input = document.querySelector("#imageInput"); 
input.addEventListener("change", function(e){ 
    var reader = new FileReader(); 
    reader.onload = function(evt){ 
     var newImage = document.createElement("img"); 
     newImage.src = evt.target.result; 
     document.querySelector("body").appendChild(newImage); 
     sessionStorage.setItem("image", evt.target.result); 
    }; 
    reader.readAsDataURL(e.target.files[0]); 
}, false); 

window.addEventListener("load", function(e){ 
    if(sessionStorage.getItem("image")){ 
     var newImage = document.createElement("img"); 
     newImage.src = sessionStorage.getItem("image"); 
     document.querySelector("body").appendChild(newImage); 
    } 
}, false); 

Quindi tutto quello che dovete fare è di riferimento l'immagine memorizzata nella cache.

+0

sessionStorage si adatta ad un file da 4 GB? – dandavis

+1

Neanche vicino. La maggior parte dei browser riduce l'archiviazione locale/di sessione a circa 5 MB (vale a dire Megabyte, non Gigabyte). sqlLite/indexedDB caps circa 25 MB. Gli utenti possono ignorare i limiti in alcuni browser ma non si può presumere che lo faranno. – SpliFF

1

AFAIK, per motivi di sicurezza, il browser non ti permetterà mai di caricare un file a meno che l'utente non lo abbia scelto personalmente. Voglio dire che non ti permetteranno nemmeno di aprire la finestra di navigazione a livello di programmazione, l'utente deve cliccare sul pulsante browse o non puoi avere il campo file nel tuo modulo . Ma questo è tutto HTML e una volta che si accetta l'uso di un plugin di terze parti come applet java, flash o silverlight, allora è un'altra storia. Puoi fare quello che vuoi in quel modo.

Ma penso che questo non sia un buon modo e se fossi in me farei le cose in modo un po 'diverso. Vorrei chiedere all'utente del file caricato incompleto solo con il loro nome e non con il loro percorso. E per verificare se un file di caricamento è nuovo o riprendere quello vecchio, vorrei calcolare il suo MD5 signature localmente e inviarlo al server prima di inviare effettivamente il file. Inoltre, è necessario memorizzare la firma di tutti i file caricati nel server in modo da poterli confrontare in futuro. La parte che non sono sicuro se sia possibile implementare o come farlo è dire al browser da quale blocco iniziare a caricare il file!

+0

_non ti consente nemmeno di aprire la finestra di ricerca a livello di codice_ In realtà puoi attivare l'evento click. – undefined

+0

Hai ragione. Forse i miei precedenti test non erano accurati come pensavo! Grazie per avermi corretto. – Mehran

-2

provare a menzionare il percorso per la cartella e provare a inserire solo il nome del file nel database in quanto non cambia il percorso e aiuta anche nel caricamento.

fare qualcosa di simile

D/abc/<?php $row['fieldname under which file is stored'];?> 

ora il file viene caricare all'interno d unità sotto la cartella abc

Problemi correlati