В общем, есть два способа загрузки изображений. Одним из них является запись файла изображения в базу данных, а другой - сохранить его в каталоге файлов сервера. Файлы изображений, записанные в базу данных, должны быть преобразованы в формат двоичного потока, занимая пространство базы данных и подходят для хранения небольшого количества изображений. Например, некоторые небольшие значки в системе имеют то преимущество записи в базу данных, что они являются относительно безопасными и их нелегко удалить пользователями случайно.
Если вы храните большое количество изображений, это обычно делается, чтобы сохранить их в папку на сервере. Есть много способов завершить загрузку, вы можете использовать метод потоковой передачи и метод FTP, и здесь используется метод FileUpload.
С различными размерами системы методы обработки файлов изображений также различны. Если количество изображений в системе не большое, просто храните все изображения в одном и том же каталоге. Если картинки накапливаются больше, вы можете классифицировать и хранить изображения в соответствии с классификацией материала, которая сохранит некоторое время на поиске файлов на диске.
При загрузке изображений в файлы вы можете загружать изображения непосредственно в каталог, вы также можете написать имя файла изображения и путь файла в базу данных, или вы можете динамически создавать пути файла в программе. Если компания требует, чтобы изображения были сохранены на специальном сервере, более целесообразно записать путь файла в полный файл. Как правило, обрабатывать, если материал (материал) соответствует изображению. Если это соответствует нескольким изображениям, его необходимо использовать в сочетании с переработкой. С одной стороны, необходимо обработать динамический отображение изображения, а с другой стороны, необходимо проверить, дублируется ли именование файла изображения. Кроме того, при обработке изображений (загрузка, удаления и изменения) вам необходимо сотрудничать с транзакциями.
Ниже приводится ключевое введение в самую основную реализацию использования FileUpload для достижения загрузки изображения.
1. Используйте теги файлов на передней части:
<name name = "filename" type = "file" class = "text1" size = "40" maxlength = "40">
2. Установите формат enctype файла: Multipart/Form-Data
<form name = "itemform" target = "_ self" id = "itemform" method = "post" action = "servlet/item/fileuploadservlet" ectype = "Multipart/Form-Data">
Инструкции о ectype = "Multipart/Form-Data":
Если этот формат используется в JSP, соответствующий сервенс не может использовать request.getParameter () для получения параметров. Вы должны использовать метод Parserequest объекта ServletFileUpload, чтобы сначала анализировать данные в объекте запроса, а затем использовать флаг Isformfield проанализированного элемента и сотрудничать с методом GetfieldName для получения данных.
3. Реализация FileUploadServlet:
пакет com.bjpowernode.drp.basedata.web; Импорт java.io.file; импортировать java.io.ioexception; импортировать java.util.iterator; импортировать java.util.list; Импорт javax.servlet.servletexception; Импорт javax.servlet.http.httpservlet; Импорт javax.servlet.http.httpservletrequest; Импорт javax.servlet.http.httpservletresponse; Импорт org.apache.commons.fileupload.fileitem; Import org.apache.commons.fileupload.disk.diskfileitemfactory; Import org.apache.commons.fileupload.servlet.servletfileUpload; Import com.bjpowernode.drp.baseddata.manager.itemmanager; Import com.bjpowernode.drp.baseddata.manager.itemmanagerimpl; Import com.bjpowernode.drp.util.applicationException; открытый класс FileUploadServlet Extrends AbstractIteMservlet {private file uploadPath; Частный файл Temppath; @Override public void init () бросает ServletException {// Когда система запускается, запустите инициализацию. Во время инициализации проверьте, существует ли папка, в которой изображение загружается, и папка, в которой хранятся временные файлы. Если его не существует, создать // Получить реальный физический путь, соответствующий root Directory uploadpath = new File (getServletContext (). GetRealPath ("upload")); System.out.println ("uploadpath ====" + uploadpath); // Если каталог не существует, если (! Uploadpath.exists ()) {// Создать каталог uploadpath.mkdir (); } // временный каталог // файл tempfile = new File (item.getName ()) Создание временного объекта Temppath = new File (getServletContext (). GetRealPath ("temp")); if (! temppath.exists ()) {temppath.mkdir (); } // Если метод родительского класса не отображается, не будет экземпляра Itemmanager, который вызовет нулевый указатель super.init (); } public void Doget (httpservletrequest, httpservletresponse response), бросает ServletException, ioException {DoPost (запрос, ответ); } public void Dopost (httpservletRequest, ответ httpservletresponse). req.getParameter () // string itemno = req.getParameter ("itemno"); //System.out.println("itemno====== " + itemno); /*********************************************** В этом фабричном классе вы можете настроить размер буфера памяти и каталог, где хранятся временные файлы. DiskFileItemfactory Factory = new DiskFileItemFactory (); // максимальный размер, который будет сохранен на заводе памяти. SetsizeThroshold (4096); // местоположение для сохранения данных, которое больше, чем getSizethreshold () factory.setRepository (Temppath); // ServletFileUpload: Отвечает за обработку загруженных файлов данных и инкапсулирование каждой части данных в объект FileItem. // При получении загруженных данных файла контент будет сохранен в кэше памяти. Если содержимое файла превышает размер буфера, указанного DiskFileItemFactory, // файл будет сохранен на диск и сохранен в качестве временного файла в указанном каталоге DiskFileItemFactory. // После получения данных файла ServletUpload записывает данные из файла в файл в загруженном каталоге файлов ServletFileUpload upload = new ServletFileUpload (Factory); // максимальный размер до того, как файлопладодексация будет брошена upload.setsizemax (1000000 * 20); / ******************* String itemno = ""; // iterator iter = fileitems.iterator () возьмите свой итератор //iter.hasnext () Проверьте, есть ли элементы в последовательности для (итератор iter = fileitems.iterator (); iter.hasnext ();) {// Получить следующий элемент в последовательности файла item = (fileitem) iter.next (); // Судья, является ли это файлом или текстовой информацией // это поле ввода обычной формы if (item.isformfield ()) {if ("itemno" .equals (item.getfieldname ())) {itemno = item.getString (); }} // Поле ввода IT if (! Item.isformfield ()) {// Имя и полный путь загруженного файла файла файла string = item.getName (); Long Size = item.getSize (); // Определите, выбран ли файл, если ((filename == null || filename.equals ("")) && size == 0) {продолжение; } // Перехватывание строки, такая как: c: /windows/debug/passwd.log filename = filename.substring (filename.lastiDexof ("//") + 1, filename.length ()); // Сохранить файл на физическом диске сервера: первый параметр: Полный путь (исключая имя файла). Второй параметр: имя файла //item.write(file); // Изменить имя файла, а имя материала одинаковы, а расширение файла вынуждено быть GIF //ITEM.WRITE(NEW FILE (uploadPath, itemno + ".gif")); // Сохранить файл в каталог без изменения элемента имени файла. // Записать имя файла изображения в базу данных itemManager.uploadItemimage (itemno, filename); }} response.sendredirect (request.getContextPath () + "/servlet/item/searchItemservlet"); } catch (Exception e) {e.printstackTrace (); Бросьте новое приложение Exception («загрузка не удалась!»); }}} Этот класс наследует AbstractiTemservlet: абстрактный родительский класс всех материалов, отвечает за создание экземпляров ItemManager
/** * Абстрактный родительский класс всех материалов Сервлтов отвечает за создание создания itemmanager * @author limin * */public abstract class AbstractIteMservlet Extends httpservlet {// Хотя это не является тем, что он не является потоковым, если он будет только чтение, не будет ошибки, защищенные itemmanager = null; @Override public void init () Throws ServletException {itemManager = new itemManagerImpl ()}}Itemmanagerimpl - это подкласс, который реализует интерфейс Itemmanager. Существует одна проблема с этой моделью дизайна, которая имеет оптимизацию зарплаты, но здесь мы не будем делать никаких неактуальных замечаний, чтобы объяснить загрузку картин.
Суммировать:
О методе инициализации init ():
Когда сервлет инициализируется, каталог создается динамически. Вот загрузка и временная температура файла в проект и каталог в соответствии с веб -приложениями Tomcat.
Стоит отметить, что метод Super.Init () должен быть вызван здесь (супер не является ссылкой на объект родительского класса, но отвечает за вызов метода родительского класса), в противном случае он может вызвать нулевое указатель на класс.
Загрузка примерно выполняется в трех шагах: используйте компонент FileUpload, чтобы проанализировать форму; Распокачать данные, передаваемые формой, и вернуть список сбора списков типа данных: fileItem; Наконец -то загрузите изображение.
Используйте метод fileitem isformfield (), чтобы определить, является ли это нормальным текстом или файлом;
Используйте fileitem.write (новый файл (uploadpath, имя файла)), чтобы загрузить файл. Первый параметр: Полный путь (за исключением имени файла). Второй параметр: имя файла;
Обработка нормальных текстовых данных:
if ("itemno" .equals (item.getfieldname ())) {itemno = item.getString (); }Загрузка является относительно зрелой технологией в течение многих лет, и есть много упакованных, которые мы можем использовать непосредственно в наших ежедневных проектах, но понимание некоторых основных принципов имеет важное значение.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.