Загрузка файлов Java и загрузка файлов являются относительно распространенными функциями в разработке программы. В следующей статье будут представлены три решения для реализации загрузки и загрузки файлов в Java. Конкретные детали следующие;
Первая точка: код Java реализует загрузку файла
Formfile file = manform.getfile (); String newFilEname = null; string newPathName = null; string fileadDre = "/numup"; try {inputStream = file.getInputStream (); // Читать файл в строку filePath = request.getRealpath (fileadDre); // Извлечь текущий путь файла системы. file1) .mkdir (); newFilEname = System.CurrentTimeMiLlis ()+ file.getFilEname (). substring (file.getFilEname (). LastIndexof ('.')); ByteArrayOutputStream Baos = new BytearRayOutputStream (); outputStream bos = new FileOutpream (filePath+ "/"+ newFilEname); newPathName = filePath+"/"+newFilename; System.out.println (newPathName); // Создать выходной поток для загрузки файлов system.out.println (filePath+"/"+file.getFilename ()); int bytesread = 0; byte [] buffer = new byte [819); while (((bytesread = stream.read (buffer, 0, 8192))! = -1) {bos.write (buffer, 0, bytesread); // Написать файл на сервер} bos.close (); stream.close ();} catch (fiLenotfoundexexceex e) {e.printStacktrace (); {e.printstacktrace ();}Вторая точка: реализовать загрузку файла на странице JSP
пакет com.vogoal.util; импорт java.io.bufferedoutputstream; import java.io.file; импорт java.io.fileOutputStream; импорт java.io.ioexception; импорт java.text.simpledateformat; импорт java.util.arraylist; import java.ut.date; импорт; javax.servlet.servletinputstream; import javax.servlet.http.httpservletrequest; public class jspfileupload {/** Запрос объект*/private httpservletrequest = nul = 1024*8;/** hashtable, в котором хранится параметры*/private hashtable paramht = new hasptable ();/** arraylist, в котором хранится имя файла загруженного файла*/private arraylist udfilearr = new arraylist ();/*** Установите объект запроса. ** @param запрос* httpservlectrequest объект запроса*/public void setRequest (httpservletrequest) {this.request = request;}/*** Установите путь загрузки файла. * * @param path * Путь загрузки файла, указанный пользователем. */public void setuploadPath (path Path) {this.uploadPath = path;}/*** Основная программа для обработки загрузки файлов. ������b * * @return int Результат работы 0 Операция файла была успешной; 1 объект запроса не существует. 2 Путь сохранения файла не установлен, или путь сохранения файла неверен; 3* Правильный Enctype не установлен; 4 Операция файла является ненормальной. */public int process () {int status = 0; // Перед загрузкой файла проверьте объект запроса, путь загрузки и Enctype. status = precheck (); // Возвращает код ошибки, когда возникает ошибка. if (status! = 0) Статус возврата; try {// �� Параметр или имя файла �u��string name = null; // Параметр Valuestring value = null; // является ли поток чтения флаг -битом флага bit fileflag = false; // Файл для сохранения. File tmpfile = null; // Имя загруженной строки файла fname = null; fileOutputStream baos = null; bufferedOutputStream bos = null; // ��hashtableparamht = new hashtable (); UpdFileArr = new ArrayList (); int rtnpos = 0; byte [] buffs = newte = newte * newte * newte * newte * newte * newte * � Get ContentTypestring contentType = request.getContentType (); int index = contentType.indexof ("boundary ="); string bound = "-" + contentype.substring (index + 9); string endboundary = boundary + "-"; // � Получить поток из объекта запроса. ServletInputStream sis = request.getInputStream (); // Читать 1 строку while while (((rtnpos = sis.readline (buffs, 0, buffs.length))! = -1) {String strbuff = new String (buffs, 0, rtnpos); // read 1 line �n�if (strbuff.startswith (brindary) {if wome & namull! name.trim (). length ()> 0) {if (fileflag) {bos.flush (); baos.close (); bos.close (); baos = null; bos = null; udfilearr.add (fname);} else {objec obj = paramht.get (name); (Arraylist) obj;} al.add (value); system.out.println (value); paramht.put (name, al);}} name = new String (); value = new String (); fileflag = false; fname = new String (); rtnpos = sis.readline (buffsefsuffse, 0, 0, length); String (buffs, 0, rtnpos); if (strbuff.tolowercase (). Startswith ("disposition: form-data;"))) {int nindex = strbuff.tolowercase (). Indexof ("name =/" "); int nlastindex = strbuff.tolowercase (). strbuff.substring (nindex + 6, nlastindex);} int findex = strbuff.tolowercase (). indexof ("filename =/" "); if (findex! 10, flastindex); fname = getFilename (fname); if (fname == null || fname.trim (). length () == 0) {fileflag = false; sis.readline (buffs, 0, buffs.length); sis.readline (buffs, 0, buffs.length); sis.readline (buffs, 0, buffs.length); продолжение;} use {fname = getFilenamebytime (fname); buffs.length); sis.readline (buffs, 0, buffs.length);}}} else if (strbuff.startswith (endboundary)) {if (name! = null && name.trim (). length ()> 0) {if (fileflag) {bos.flush (); baos.close (); null; updfilearr.add (fname);} else {object obj = paramht.get (name); arraylist al = new Arraylist (); if (obj! = null) {al = (arraylist) obj;} al.add (value); paramht.put (name); bos == null) {tmpfile = новый файл (uploadpath + fname); baos = new FileOutputStream (tmpfile); Bos = new BufferedOutputStream (baos);} bos.write (buffs, 0, rtnpos); baos.flush (); strbuff); value = value + strbuff;}}}} catch (ioException e) {status = 4;} return status;} private int precheck () {int errcode = 0; if (request == null) return 1; if (uploadpath == null || uploadpath.trim (). length () == 0) return 2; else {file tmpf = new File (uploadpath); if (! tmpf.exists ()) return 2;} String contentType = request.getContentType (); if return rerc rercode rercode rercode (retring plase rercder 3; name) {string value = ""; name.trim (). length () == 0) return null; if (paramht.get (name) == null) return null; arraylist al = (arraylist) paramht.get (name); string [] strarr = new String [al.size ()]; for (int i = 0; i <al.size (); i ++) strar getupdFilesize () {return udVfileArr.Size ();} public String [] getUpdFilEnames () {string [] strarr = new String [UpdFileArr.Size ()]; for (int i = 0; i <updFileArr.Size (); i ++) strarr [i] = (String) updfilearr.get (i); getFilEname (String input) {int findex = input.lastIndexof ("//"); if (findex == -1) {findex = input.lastIndexof ("/"); if (findex == -1) {return input;}} input = subString (findex + 1); return input;} private string getFILEB input.indexof ("."); дата dt = new Date (); simpledateformat sdf = new SimpleDateFormat ("yyyymmddhhmmsssss"); return input.substring (0, index) + sdf.format (dt) + input.substring (index);}}}}}}}2. Ссылка на класс Java на странице JSP:
<%@page import = "com.vogoal.util.jspfileupload"%> <%// инициализировать jspfileupload jfu = new jspfileupload (); // Установить объект запроса jfu.setrequest (request); // ulducted файл jfu.setulaudpath ("c: //); jfu.process (); // Получить значения других параметров управления вводом в форме string username = jfu.getParameter ("username"); // Если есть несколько элементов управления ввода для одного и того же параметра, верните строку массива [] usernamearr = jfu.getparameters ("username"); // Получите имя загруженного файла. jfu.getupdfilenames (); // Получить количество загруженных файлов, этот метод немного бесполезен int fillumber = jfu.getupdfilesize (); // Ниже приведен вывод кода для теста. // out.println ("Параметр:" + username); // out.println ("Размер параметра:" + usernamearr.length); // out.println ("fileArr размер:" + fileArr.length); // if (fileArr.length> 0) // out.println ("fileArr.Третья точка: struts2 реализует загрузку и загрузку файлов
Шаг 1: Добавить Commons-FileUpload-1.2.1.jar и Commons-IO-1.3.2.jar в соответствии с Web-Inf/Lib. Эти два файла могут быть загружены с http://commons.apache.org/.
Шаг 2: Установите Enctype таблицы форм: «Multipart/Form-Data», следующим образом:
Код Java
открытый класс uploadAction {private file uploadImage; //File private String uploadImageContentType;//File type private String uploadImageFileName;//File name private String bookname;//Book name private String author;//Author private String savePath;//File save location//Attribute getter/setter method public String upload() throws Exception{ //Implement upload code, I/O operation completes return "uploadSuccess"; }}Примечание. Файл -домен в форме соответствует трем свойствам в действии, а именно: имя файла и тип файла. Наименование исправлено. Имя файла должно быть таким же, как и имя домена файла в форме (uploadimage). Имя файла: файл + имя файла и тип файла: file + contentType.
Шаг 4: Настройте наше действие загрузки на struts.xml.
Код Java
<name = "upload"> <param name = "savePath">/uploadfile </param> <result> /success.jsp </result> </action>
ПРИМЕЧАНИЕ. Чтобы указать каталог сохранения загруженного файла на сервере, вам необходимо определить переменную SavePath в загрузке и добавить соответствующие методы сеттера и getter, чтобы Struts2 могла назначать значение /uploadfile в атрибут SavePath, то есть для использования переменной SavePath в загрузке, вы должны определить его в overloaduction.
Тип фильтрации файла ручной конфигурации
<param name = "allucttypes"> image/bmp, image/png, image/gif, image/jpeg </param>
Ручная конфигурация ограничение размера файла
<param name = "maximumsize"> 1048576 </param>
Используйте struts2 upload interceptor для реализации фильтрации файлов
Struts2 предоставляет перехватчика загрузки файла - Fileupload. Настройка этого перехвата, фильтрация загруженных файлов может быть легко достигнута.
При настройке перехватчика FileUpload вы можете указать два параметра для него:
AllTyPES: указывает тип файла, который разрешен для загрузки, разделенного английским запятой (,).
MaximumSize: Указывает размер файла, разрешенный для загрузки в байтах.
Совет: настройка перехватчика FileUpload, вы можете легко реализовать фильтрацию файлов. Когда фильтрация файла не удается, система автоматически передаст входной логический вид. Следовательно, логическое представление с именем ввода должно быть настроено для действия. Кроме того, ссылка на перехватчик DefaultStack должна быть настроена для действия.
Используйте перехватчик Struts2 для реализации конфигурации фильтрации файлов следующим образом:
<action name="uploadFileAction"> <interceptor-ref name="defaultStack"> <!-- Configure the file type allowed to be uploaded, separated by multiple using ","--> <param name="fileUpload.allowedTypes"> image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/x-png,image/pjpeg </param> <!-Настройте размер файла, разрешенный для загрузки, модульные байты, этот пример: 1mb-> <param name = "fileupload.maximumsize"> 1048576 </param> </receptor-ref> <result name = "input">/jsp/onefilefileupload.jsp </result> <result name = "success"> jsp/jsp result.
Когда пользователь не загружается, есть определенное сообщение. В Struts2 используйте тег <s: Fielderror/>, чтобы вывести сообщение об ошибке на страницу.
Примечание. Если вы хотите использовать информацию об ошибке strUTS2, класс действий, который загружает файл, должен наследовать действия, в противном случае Struts2 не предоставит информацию об ошибке вывода.
Мы можем настроить файлы ресурсов (.properties), чтобы сохранить информацию о выводе информации пользователю.
struts.messages.eror.file.too.large: Когда размер файла загрузки превышает установленное значение, Struts2 выведет информацию о подсказке, соответствующую ключу.
struts.messages.error.content.type.not.allowed: когда загруженный тип файла не соответствует установленному значению, Struts2 выводит информацию, соответствующую ключу.
struts.messages.error.uploading: Когда при загрузке файла возникает неизвестная ошибка, Struts2 выведет информацию о приглашении, соответствующую ключу.
Нам также необходимо настроить файл ресурса в файл struts.xml. Далее мы должны просмотреть наш файл ресурсов. Он уже содержит китайский. Мы должны преобразовать его, а затем настроить в проект.
Установите файл ресурса на struts.xml:
<constant name = "struts.custom.i18n.resources" value = "Сообщения"/> или <constant name = "struts.custom.i18n.resources" value = "message_zh_cn"/>>
Используйте команду Native2ascii d: /messages.properties d: /messages_zh_cn.properties, чтобы преобразовать исходный файл ресурса в поддерживаемые.
Примечание. Сохраните международный, суффикс имени файла ресурса: *_ZH_CN + расширение файла.
Принцип загрузки нескольких файлов такой же, как и выше, но следует отметить, что имена атрибутов имен нескольких полей файлов должны быть одинаковыми, а в действии файл [] или список <File> должен использоваться для его получения.
Я лично думаю, что использование этого метода для загрузки нескольких файлов не является
очень хороший.
Struts2 для загрузки файлов
Struts2 предоставляет тип результата потока, который специально используется для поддержки загрузки файлов. При указании типа результата потока необходимо настроить параметр inputName, который указывает поток ввода, который является входом в загруженный файл (то есть файл может быть загружен в потоке через эту запись).
Реализуйте действие загрузки файла
Общедоступный класс FileDownLoadAction реализует Action {// Это значение свойства указано в файле конфигурации. Struts2 будет автоматически вводить (то есть назначать значение). Вам необходимо предоставить методы сеттера и getter Private String InputPath; // указать полный путь загруженного файла (имя пути + имя файла)/ * * Класс действия, который реализует загрузку, должен предоставить метод для возврата экземпляра InputStream. Соответствующее значение свойства inputName в <result ... // public inputStream getTargetFile () Throws Exception {return servletactOctontext.getServletContext (). GetResourCeasStream (inputPath); } // Метод выполнения, который обрабатывает запросы пользователей, который возвращает строку успеха public String execute () выбрасывает exception {return "успех"; }}Соответствующая конфигурация действия в файле struts.xml
<name = "Загрузить"> <!-Укажите местоположение загруженного ресурса-> <param name = "inputPath">/uploadfile/demo.txt </param> <!-Настройте тип результата как поток-> <name = "success" type = "stream"> <!-Укажите файл типа файла файла-> <paramedeped stocted "> </! Файл-> <param name = "inputName"> targetFile </param> <!-Укажите метод загрузки загруженного файла и имя файла, сохраненное во время загрузки. Имя файла при сохранении файла должно иметь расширение, а расширение указывает значок типа загрузки-> <param name = "contentdisposition"> Attachment; filename = struts2.txt </param> <!-Укажите размер буфера загруженного файла-> <param = "buffersize"> 4096 </param> </result> </action> <> <param = "buffersize"> 4096 </param> </result>
Выше приведены три решения для реализации загрузки и загрузки файлов в Java, представленных вам редактором. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!