Это API-специфический код. т.е. не обычный код загрузки файла.
Обычные шаги будут заключаться в следующем:
- конструкция FileItemFactory
- конструкта ServletFileUpload, передавая ему фабрику
- вызов ServletFileUpload.parseRequest (запрос)
Этот ответ заменяет 2 & 3 с логикой независимо от сервлетов - он избегает использования ServletFileUpload (сервлета) и его предка FileUpload (чтобы управлять расположением файла с абсолютным именем пути). Примечание: (3) обычно анализирует параметры HTTP-запроса для определения параметров нижнего уровня, которые передаются в FileItemFactory.createItem - эти параметры вместо этого предоставляются вручную, а затем используются только как информационные метаданные. Замена 2 & 3:
- построить FileItem (через FileItemFactory.createItem - необходимость вручную обеспечить параметры нижнего уровня, как правило, определяется с помощью ServletFileUpload.upload())
- записи на конкретный файл, с абсолютным путь
- загрузить файл с помощью MultipartFile
просил код ниже. В конце он вызывает общий код - совместно с загрузкой сервлета.
// 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...
Параметры:
- fullFilePathString: абсолютный путь (как строка), где файл будет загружен
- FIELDNAME: имя поля на форме
(Be вызывает ServletFileUpload & FileUpload избежать, следующие становятся только поле метаданных, и не используется для управления обработкой)
- sizeThreshhold: порогом размера памяти в байтах (обычно файлов меньше загружены с использованием только и файлы памяти более крупные загружаются с диска - но в этой логике всегда загружаются файлы с диска). По умолчанию = DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD.
- repositoryBaseDireFile: обычно загрузка файла «Темп» каталог (как тип файла), но эта логика использует абсолютный путь загрузить файл
- CONTENTTYPE: тип содержимого (MIME тип) поля на форма (поле null, если не поле нескольких частей)
- isFormField: если поле формы, поле «истина», другое значение false, если поле с несколькими частями.
- fileName: имя файла - обычно указывается через форму/клиент.
Я немного смущен вашим заявлением CommonsMultipartFile file = request. (Myfile). Файл apiupupload вернет список элементов. List items = fileUpload.parseRequest (запрос); Это то, о чем вы говорите? – Zenil
@ Zenil извините, это должно быть 'request.getFile ('myfile')' – Anthony
Вы можете использовать 'RandomAccessFile'. Вот пример. https://opencast.jira.com/svn/MH/contrib/BigFileUploader/Upplet/src/upplet/Uploader.java –