В этой статье сравниваются два примера загрузки файлов, чтобы помочь всем лучше узнать функцию загрузки файла Java. Конкретный контент заключается в следующем
1. Код загрузки вложения Java
@Controllerpublic class uploadfile extends basejsoncontroller {/** * upload * * @param * @param creativefile * @param response * @return */@requestmapping (value = "/upload/uploadfile.json") public uploadfile (httpserverquest recement repectsuresle respensevalseressvelsesbolseressvelsesbolsesbolsesbolsesples. 1. Чтобы обеспечить безопасность сервера, загруженный файл должен быть помещен в каталог, который не может быть обращена непосредственно в внешнем мире, например, в каталоге Web-Inf. * 2. Чтобы предотвратить перезапись файла, для загрузки файла должно быть сгенерировано уникальное имя файла. * 3. Чтобы предотвратить появление слишком большого количества файлов в каталоге, вы должны использовать алгоритм хэш для разрыва хранилища. * 4. Максимальное значение загруженных файлов должно быть ограничено. * 5. Чтобы ограничить тип загруженных файлов при получении загруженного имени файла, определите, является ли имя суффикса законным. */// Получить загруженный каталог сохранения файлов, сохранить загруженный файл в каталоге Web-Inf и не позволяет прямой доступ от внешнего мира, чтобы обеспечить безопасность загруженных файлов string savePath = request.getSession (). GetServletContext (). GetRealPath ("/web-inf/upload"); // каталог временного сохранения файлов, сгенерированный во время загрузки строки temppath = request.getSession (). GetServletContext (). GetRealPath ("/web-inf/temp"); File tmpfile = new File (Temppath); if (! tmpfile.exists ()) {// Создать временный каталог tmpfile.mkdirs (); } // Сообщение подсказывает jsonarray arr = new jsonarray (); Map <string, object> map = null; InputStream in = null; FileOutputStream OUT = null; Попробуйте {// Использовать компонент загрузки файла Apache для обработки шагов загрузки файла: // 1. Создать DiskFileItemFactory Factory DiskFileItemfactory Factory = new DiskFileItemFactory (); // Установите размер буфера завода. Когда размер загруженного файла превышает размер буфера, временный файл будет создан и сохранен в указанном временном каталоге. factory.setsizethershold (1024*100); // Установить размер буфера на 100 КБ. Если не указано, размер буфера по умолчанию составляет 10 КБ. // Установить каталог хранилища временного файла, сгенерированного во время загрузки Factory.setRepository (tmpfile); // 2. Создать файл загрузки анализатора ServletFileUpload upload = new ServletFileUpload (Factory); // Supert Файл Загрузка Прогресс opload.setProgressListener (new ProgressListener () {public void Update (Long pbytesRead, long pcontentLength, int arg2) {System.out.println («Размер файла:« + pcontentLength + », в настоящее время обработан:« + pbytesRead);}); // Решить китайский искаженную upload.setheAderencoding ("UTF-8"); // 3. Определите, являются ли представленные данные данными формы загрузки if (! Servletfileupload.ismultipartcontent (request)) {// Получить возврат данных в соответствии с традиционным способом; } // Установите максимальный размер загруженного отдельного файла, который в настоящее время устанавливается на 1024*1024 байт, то есть 20 мБ upload.setfilesizemax (1024*1024*20); // Установить максимальное значение общего количества загруженных файлов. Максимальное значение = сумма максимальных размеров нескольких файлов, загруженных одновременно. В настоящее время он установлен на 40 МБ. // 4. Используйте анализатор ServletFileUpload, чтобы анализировать загруженные данные. Результат анализа возвращает коллекцию списка <FieleItem>. Каждый FileItem соответствует элементу ввода формы формы @suppresswarnings ("unchecked") list <fieletem> list = opload.parserequest (request); Для (FileItem Item: List) {// Если данные обычных элементов ввода инкапсулируются в FileItem if (item.isformfield ()) {string name = item.getfieldname (); // Решить китайскую искаженную проблему данных об обычных входных элементах string value = item.getString ("UTF-8"); // value = new String (value.getBytes ("iso8859-1"), "UTF-8"); System.out.println (name + "=" + value); } else {// Если элемент файла инкапсулируется в загруженном файле // Получить загруженное имя файла, string filename = item.getName (); if (filename == null || filename.trim (). equals ("")) {продолжение; } // Примечание: имена файлов, представленные разными браузерами, разные. Некоторые браузеры отправляют имена файлов с путями, такими как: c: /a/b/1.txt, в то время как некоторые являются просто простыми именами файлов, такие как: 1.txt // Обработайте часть пути имени файла полученного загруженного файла, только часть файла имени файла сохраняется filename = filename.substring (filename.lastidexof ("//")+1); // Получить расширение загруженного файла string fileextname = filename.substring (fileName.lastIndexof (".")+1); // Если вам нужно ограничить загруженный тип файла, вы можете использовать расширение файла, чтобы определить, является ли загруженный тип файла законным if (stringUtils.equals (fileextname, "rar") || stringUtils.equals (fileextname, "Zip")) {бросает новое bizexcept ("", "upload -compressed files - это профилируется!"); } /*************** /// Получить входной поток загруженного файла в элементе = item.getInputStream (); /******* • // Получить файл сохранение string realSavePath = makePath (saveFilename, savePath); // Создать выходной stream file = new FileOutputStream (RealSavePath + "//" + saveFilename); // создать буферный байтовый буфер [] = новый байт [1024]; // Идентификация того, были ли данные в входном потоке, прочитаны int len = 0; // Цикл считывает входной поток в буфере, (len = in.read (buffer))> означает, что все еще есть данные в while ((len = in.read (buffer))> 0) {// Использовать выходной поток для файла fileOutputStream, чтобы записать данные буфера в указанный каталог (SavePath + "//" + wanlename). } // Закрыть входной поток в .close (); // закрыть выходной поток out.close (); // Удалить временный файл, сгенерированный при обработке файла item.delete (); map = new HashMap <String, Object> (); map.put ("SaveFilename", SaveFilename); map.put ("RealSavePath", RealSavePath); arr.add (map); }} returnsuccessjson ("uploadbase.filesizeLimitexedEdexception e) {e.printstacktrace (); returnfailjson (e.getMessage ()," Одиночный файл превышает максимальное значение !!! ", response);} catch (fileuploadbase.sizelimitexedexexception e) {e.printStact. returnfailjson (e.getmessage (), «Общий размер загруженного файла превышает максимальный предел!!», in.close (); @return uuid + "_" + исходное имя файла */private String MakeFilEname (String FileName) {//2.jpg // Чтобы предотвратить перезапись файла, уникальное имя файла должно быть сгенерировано для загрузки файла return uuid.randomuuid (). toString () + "_" + filename; } /** * To prevent too many files from appearing in a directory, you need to use the hash algorithm to break up the storage* @Method: makePath * @Description: * @Anthor:xuwentao * * @param filename File name, generate storage directory based on the file name* @param savePath File storage path* @return New storage directory */ private String makePath(String filename,String SavePath) {// Получить значение HashCode имени файла, и то, что вы получаете, является адресом имени файла объекта String в памяти int hashcode = filename.hashcode (); int dir1 = hashcode & 0xf; // 0--15 int dir2 = (hashcode & 0xf0) >> 4; // 0-15 // Создание новой строки каталога сохранения dir = savePath + "//" + dir1 + "//" + dir2; // upload/2/3 upload/3/5 // Файл может представлять как файл файла, так и файл файла = новый файл (dir); // Если каталог не существует, если (! File.exists ()) {// Создать файл каталога.mkdirs (); } return dir; }}2. Java загрузить код резюме
/ ***Загрузить резюме*1-файл Создание не удалось 2-Exception 3-Upload Faile 4-File, не полученного 5-файла, не удаленного 6-сплачивания Word, Excel, PPT, PDF-файлы*//*Разделитель пути: используется в адаптивной рабочей системе*/ private Static Final String file_separator = System.getProperties () .getProperty ("file.se.sesparator"); / ** * upload file * * @param fileio * @param oldcontracturl * @param request * @return return file (относительный адрес, не Absolute Adder) */ @override public string upload (multiте request.getSession (). getServletContext (). getRealPath ("files"); // Удалить файлы и папки IF (OldContracturl! = Null) {string oldDirectory = oldContracturl.subString (5, oldContracturl.lastIndexof (file_separator)); File file = new File (uploadUrl + OldDirectory); Boolean flag = deletedir (файл); if (! flag) {logger.error ("удаление старого файла"); вернуть "5"; }} // загрузить новый файл резюме LONG теперь = SYSTEM.CurrentTimeMillis (); uploadUrl = uploadUrl + file_separator + now + file_separator; String resumeName = ""; if (! fileio.isempty ()) {resumeName = stringUtils.deletewhitespace (fileio.getoriginalfilename ()); // Судья суффикс файла/*строка суффикс = resumeName.substring (resumeName.lastIndexof ("."), ResumeName.length ()) .toloarceCase (); if (! ". Doc" .equals (суффикс) &&! ". Docx" .Equals (суффикс) &&! logger.error ("не Word, Excel, PPT, PDF -файлы"); вернуть "6"; }*/} else {logger.error ("файл не получен"); вернуть "4"; } Файл dir = new File (uploadUrl); if (! dir.exists ()) {dir.mkdirs (); } Файл targetFile = новый файл (uploadUrl + resumeName); if (! targetfile.exists ()) {try {targetfile.createnewfile (); } catch (ioException e) {logger.Error ("Создание файла не удалось", e); вернуть "1"; }} try {fileio.transferto (targetFile); } catch (allogalStateException e) {logger.error ("Исключение предложения", e); вернуть "2"; } catch (ioException e) {logger.error ("upload fail", e); вернуть "3"; } return file_separator + "files" + file_separator + теперь + file_separator + resumeName; } /*** Рекурсивно удалить все файлы в каталоге и все файлы в подканализациях* @param dir Справочник файла, который будет удален* @return Boolean возвращает «true», если все удаления были успешными. * Если удаление не удается, метод перестает пытаться * удалить и возвращает «false». */ public boolean letetedir (файл dir) {if (dir.isdirectory ()) {string [] kids = dir.list (); // рекурсивно удалять подкаталог в каталоге для (int i = 0; i <kids.length; i ++) {boolean uccess = deletedir (новый файл (dir, kids [i])); if (! Успех) {вернуть false; }}} // каталог пуст в настоящее время, вы можете удалить return dir.delete (); }Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для изучения каждого и освоить навыки загрузки файлов Java.