Dies ist API-spezifischen Code. also nicht die üblichen Datei-Upload-Code.
Übliche Schritte wären:
- Konstrukt FileItemFactory
- Konstrukt ServletFileUpload, es die Fabrik vorbei
- Anruf ServletFileUpload.parseRequest (Anfrage)
Diese Antwort ersetzt 2 & 3 mit Logik unabhängig von Servlets - es vermeidet ServletFileUpload (servlet-spezifisch) und seinen Vorgänger FileUpload (um die Dateiposition mit einem absoluten Pfadnamen zu steuern). Hinweis: (3) untersucht HTTP-Anforderungsparameter normalerweise, um Parameter auf niedrigerer Ebene zu ermitteln, die an FileItemFactory.createItem übergeben werden. Diese Parameter werden stattdessen manuell bereitgestellt und dann nur als Informationsmetadaten verwendet. Ersatz für 2 & 3:
- FileItem konstruieren (via FileItemFactory.createItem - müssen manuell untergeordneten Parameter liefern, in der Regel über ServletFileUpload.upload bestimmt())
- Schreiben in einer bestimmten Datei, mit einer absoluten Pfad
- die Datei über MultipartFile lädt unter
angeforderten Code zur Verfügung gestellt. Am Ende ruft es gemeinsamen Code auf, der mit dem Servlet-Upload geteilt wird.
// 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...
Parameter:
- fullFilePathString: absoluter Pfad (als String) in der Datei
- Feldname hochgeladen wird: Name des Feldes auf dem Formular
(Be verursachen ServletFileUpload & Fileupload werden nur vermieden, die folgenden werden Metadatenfelder und sind nicht zur Steuerung Verarbeitung)
- sizeThreshhold verwendet: Speichergrößenschwelle in Bytes (normalerweise Dateien kleiner werden hochgeladen Verwendung Speicher nur und Dateien, Größere werden über die Festplatte hochgeladen - aber diese Logik hat Dateien immer über die Festplatte hochgeladen. Standard = DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD.
- repositoryBaseDireFile: in der Regel der Datei-Upload ‚Temp‘ -Verzeichnis (als Dateityp), aber diese Logik verwendet eine absolute Pfaddatei
- content hochladen: Inhaltstyp (MIME-Typ) dem Feldes auf das Formular (null, wenn nicht mehrteiliges Formularfeld)
- isFormField: wenn einfaches Formularfeld, 'wahr', sonst falsch, wenn mehrteiliges Feld.
- filename: der Name der Datei - in der Regel über Form/Client angegeben.
Ich bin ein wenig verwirrt mit Ihrer Aussage CommonsMultipartFile file = Anfrage. (Myfile). Die Dateiupload-API gibt eine Liste von Elementen zurück. Listenelemente = fileUpload.parseRequest (request); Ist es das, worauf du dich beziehst? – Zenil
@Zenil sorry, das sollte 'request.getFile ('myfile')' – Anthony
sein Sie können 'RandomAccessFile' verwenden. Hier ist das Beispiel. https://opencast.jira.com/svn/MH/contrib/BigFileUploader/Upplet/src/upplet/Uploader.java –