jest to kod API specyficznych tzn. nie zwykły kod wysyłania plików.
Zwykłe kroki byłoby:
- konstrukt FileItemFactory
- konstruktu ServletFileUpload, przekazując mu fabrykę
- wezwanie ServletFileUpload.parseRequest (request)
Ta odpowiedź zastępuje 2 & 3 z logiką niezależny od serwletów - unika używania ServletFileUpload (specyficznego dla serwletu) i swojego przodka FileUpload (aby kontrolować lokalizację pliku za pomocą bezwzględnej nazwy ścieżki). Uwaga: (3) zazwyczaj sprawdza parametry żądania HTTP w celu określenia parametrów niższego poziomu, które są przekazywane do FileItemFactory.createItem - te parametry są zamiast tego podawane ręcznie, a następnie używane tylko jako metadane informacyjne. Zamiennik 2 & 3:
- skonstruować FileItem (przez FileItemFactory.createItem - konieczność ręcznego wprowadzenia parametrów niższym poziomie, zazwyczaj metodą ServletFileUpload.upload())
- zapisu w określonym pliku bezwzględną ścieżka
- przesłać plik za pomocą MultipartFile
Zamówiony kod podany poniżej. Na końcu wywołuje wspólny kod - udostępniany wraz z przesłaniem serwletu.
// 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...
Parametry:
- fullFilePathString: absolutny ścieżki (string), w którym plik zostanie przekazany
- fieldName: Nazwa pola w postaci
(Be spowodować ServletFileUpload & FileUpload unika Poniższe wymogi stosuje się tylko pola metadanych, i nie są wykorzystywane do kontroli przetwarzania)
- sizeThreshhold: pamięci próg rozmiar w bajtach (zwykle pliki mniejsze są przesyłane przy użyciu tylko i pliki pamięci większe są przesyłane za pośrednictwem dysku - ale ta logika ma zawsze pliki przesyłane za pośrednictwem dysku). Domyślnie = DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD.
- repositoryBaseDireFile: zwykle przesyłanie plików katalogu 'temp' (jako typ pliku), ale ta logika wykorzystuje ścieżkę bezwzględną do File Upload
- contentType: typ zawartości (typu MIME) pola na formularz (pusty, jeśli nie wieloczęściowy obszar formularza)
- isFormField: jeśli zwykłe pole formularza, "prawda", w przeciwnym razie fałsz, jeśli pole składa się z wielu części.
- nazwa_pliku: nazwa pliku - zwykle określona za pomocą formularza/klienta.
Jestem trochę zdezorientowany twoim stwierdzeniem: CommonsMultipartFile file = request. (Myfile). Interfejs API Fileupload zwróci listę elementów. List items = fileUpload.parseRequest (request); Czy to właśnie masz na myśli? – Zenil
@Zenil przepraszam, to powinno być 'request.getFile ('myfile')' – Anthony
Możesz użyć 'RandomAccessFile'. Oto przykład. https://opencast.jira.com/svn/MH/contrib/BigFileUploader/Upplet/src/upplet/Uploader.java –