questo è codice specifico per API. cioè non il solito codice di caricamento dei file.
fasi usuali sarebbero:
- costrutto FileItemFactory
- costrutto ServletFileUpload, passando la fabbrica
- chiamata ServletFileUpload.parseRequest (richiesta)
Questa risposta sostituisce 2 & 3 con logica indipendente dai servlet - evita di utilizzare ServletFileUpload (specifico per il servlet) e il suo antenato FileUpload (in modo da controllare il percorso del file con un nome assoluto del percorso). Nota: (3) di solito esamina i parametri di richiesta HTTP per determinare i parametri di livello inferiore che vengono passati a FileItemFactory.createItem - questi parametri vengono invece forniti manualmente e quindi utilizzati solo come metadati informativi. Rimontaggio per 2 & 3:
- costruire FileItem (via FileItemFactory.createItem - necessità di fornire manualmente i parametri di livello inferiore, solitamente determinati tramite ServletFileUpload.upload())
- scrittura a un file specifico, con un assoluto percorso
- caricare il file tramite MultipartFile
codice richiesto fornito di seguito. Alla fine richiama codice comune, condiviso con il caricamento di Servlet.
// Initialise Apache Commons FileItemFactory for API use only
FileItemFactory fif = new DiskFileItemFactory(sizeThreshold, repositoryBaseDirFile);
// Create Apache Commons FileItem & write file at fullFilePathString into it
FileItem fi = fif.createItem(fieldName, contentType, isFormField, fileName);
fi.write(new java.io.File(new java.net.URI(fullFilePathString));
// Convert FileItem to Spring wrapper: CommonsMultipartFile
org.springframework.web.multipart.MultipartFile mf = new CommonsMultipartFile(fi);
// From here, reuse the same code as the servlet upload. Operate only upon
// Spring MultipartFile, but not ServletFileUpload, FileItemFactory etc...
Parametri:
- fullFilePathString: percorso assoluto (come String) dove file verranno caricati
- nomeCampo: nome del campo del modulo
(Essere causare ServletFileUpload & FileUpload si evitano, solo i seguenti campi di metadati diventano, e non vengono utilizzati per controllare l'elaborazione)
- sizeThreshhold: Soglia dimensione della memoria in byte (solitamente file più piccoli vengono caricati utilizzando solo e file memoria più grandi vengono caricati tramite disco - ma questa logica ha file sempre caricati via disco). Impostazione predefinita = DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD.
- repositoryBaseDireFile: solito la directory di upload file 'temp' (come un tipo di file), ma questa logica utilizza un percorso assoluto per caricare file di
- contentType: tipo di contenuto (tipo MIME) di campo su il modulo (campo modulo null se non multiparte)
- isFormField: se campo modulo normale, 'true', altrimenti falso se campo multiparte.
- fileName: il nome del file, in genere specificato tramite form/client.
fonte
2013-05-22 03:25:09
Sono un po 'confuso con la tua dichiarazione CommonsMultipartFile file = request. (Myfile). Il fileupload api restituirà un elenco di elementi. Elenca elementi = fileUpload.parseRequest (richiesta); E 'questo quello a cui ti stai riferendo? – Zenil
@Zenil scusate, che dovrebbe essere 'request.getFile ('myfile')' – Anthony
È possibile utilizzare 'RandomAccessFile'. Ecco l'esempio. https://opencast.jira.com/svn/MH/contrib/BigFileUploader/Upplet/src/upplet/Uploader.java –