Окружающая среда: maven + springmvc + пружина + mybatis + mysql
В этой статье в основном объясняется, как использовать ввод для загрузки файлов в указанный каталог сервера, или сохранить их в базе данных; Как загрузить файлы из базы данных, отображать файлы изображений и достичь масштабирования.
Храните файлы в базе данных, как правило, массив байтов, в котором хранятся файлы, а соответствующий тип данных базы данных - Blob.
Во -первых, вам нужно создать базу данных, здесь вы используете базу данных MySQL.
Примечание. Код, приведенный в статье, в основном выдержка и не завершен.
1. Подготовка
Используйте Maven, чтобы создать проект Springmvc+Spring+Mybatis+MySQL.
Как интегрировать Spring+mybatis+mysql, см. Введение Mybatis и настройте Mybatis+Spring+MySQL:
Mybatis Learning One, введение и конфигурация Mybatis mybatis + spring + mysql
Для строительства среды Springmvc, см.
Стройте проект Maven's Springmvc с использованием Eclipse
На переднем плане HTML enctype формы является многоутрой/форм-данных. Обратите внимание, что название ввода и выбора должно соответствовать членам в студенческой форме один за другим.
Загруженный URL -адрес является Addaction.do. Параметры этого метода действия используют StudentForm для картирования представленных данных. В настоящее время можно получить данные отправленного файла. Затем мы работаем в файле.
Создайте таблицу Photo_tbl: поле Photo_Data используется для хранения файлов, а тип - Mybatis longblob; Затем напишите интерфейс -интерфейс Photomapper от Java Mapper: включая дополнения, удаления, модификации и поиски; XML -файл Mappper: операторы SQL, соответствующие интерфейсу Java.
И файл конфигурации пружины должен добавить объявление бобов.
Ниже приведены фрагменты кода HTML, Action и StudentForm; Создайте код интерфейса SQL, PhotoMapper.java и код файла photoMapper.xml таблицы Photo_tbl.
1.1 Метод написания формы HTML
1. <form action = "<c: url value = 'Addaction.do'/>" method = "post" enctype = "multipart/form-data"> 2. 9. </form>
1.2 Метод действия
1./** 2. * Добавлен - отправить 3. */ 4.@requestMapping (value = "Addaction.do") 5. Публичная строка Add_Action (модель ModelMap, форма StudentForm) {6. 7.} 1.3 Класс студентов
1.Package Liming.Student.Manager.Web.Model; 2. 3.Import org.springframework.web.multipart.multipartfile; 4. 5. Public Class Cloutform Extends GeneralForm {6. 7. Private String StudentName; 8. Private Int StudentSex; 9. частная строка студентов -бирта; 10. Частный Multipartfile StudentPhoto; 11. 12.} 1.4 Создать photo_tbl
1. Create Table Photo_tbl 2. (3. Photo_id varchar (100) Первичный ключ, 4. photo_data longblob, 5. file_name varchar (10) 6.);
1.5 Интерфейс Photomapper
1.@Repository 2.@Transactional 3. Public Interface Photomapper {4. 5. Public void CreatePoto (Photoentity Entity); 6. 7. Public int deletephotobyphotoid (String Photoid); 8. 9. public int updatePhotodate (@param ("photoid") String Photoid, @param ("photodate") byte [] photodate); 10. 11. Public Photoentity GetPhotoEntityByphotoid (String Photoid); 12. 13.} 1.6 Файл Photomapper.xml
В том числе дополнение, удаление, модификацию и поиск. Недавно добавленный фотоид использует пользовательскую функцию MySQL для автоматического генерации первичных ключей. При работоспособности Blobs вам необходимо установить TypeHandler для «org.apache.ibatis.type.blobtypehandler. Параметры необходимо указать позже при вставке и обновлении, и их необходимо указать в Resultmap.
1. namespace = "liming.student.manager.data.photomapper"> 4. <resultmap type = "liming.student.manager.data.model.photoentity" id = "photomapper_resultmap_photoentity"> 5. <id property = "photoid" column "photo_id" javatype = " /> 6. <Result Property = "photoData" column = "photo_data" javatype = "byte []" jdbctype = "blob" typehandler = "org.apache.ibatis.type.blobtypehandler" /> 7. <result property = "fileName" colun 8. </resultMap> 9. 10. <INSERT ID = "createPoto" parameterType = "liming.student.manager.data.model.photoEntity"> 11. <selectKey keyProperty = "photoid" resultType = "string" order = "перед"> 12. SelectVal (') 13. </selectKeke> 14. Photo_data, 16. file_name) 17. значения ( #{photoid, jdbctype = varchar}, 18. #{photodata, javatype = byte [], jdbctype = blob, typehandler = org.apache.ibatis.type.blobtypehandler}, 19. #{fillename.type.type.blobtypepehandler}, 19. 20. javatype = byte [], jdbctype = blob, typehandler = org.apache.ibatis.type.blobtypehandler}, 30. file_name = #{filename, jdbctype = varchar} 31. где photo_id = #{photoid, jdbctype = varchar} 32. id = "getPhotoEntityByphotoid" resultMap = "photoMapper_Resultmap_photoEntity"> 35. Выберите Photo_ID, 36. Photo_Data, 37. File_Name 38. From_tbl 39. Где Photo_id = #{photoid, jdbctepe = varchch} 40. </select> 41. 1.7 Файл конфигурации пружины
Файл конфигурации пружины должен добавить объявление org.springframework.web.multipart.commons.commonsmultipartresolver.
1. <Bean id = "MultipResolver"> 2.
2. Поместите файл на сервер
1. PRIVATE Статическая окончательная строка uploadfilepath = "d: // temp_upload_file //"; 2. 3./** 4. * Новое - отправить только сохранение файлов на сервер 5. */ 6.@chearchmapping (value = "Addaction.do") 7. Public String ADD_ACTION (ModelMap Model, Form Form) {8.try {9. MultipartFile uploadfile = form.getStudentPhoto (); 10. String filename = uploadfile.getoriginalfilename (); 11. inputStream IS = uploadfile.getInputStream (); 12. // Если у сервера уже есть файл с тем же именем, что и файл загрузки, сообщение об выводке вывода 13. File tempfile = новый файл (uploadFilePath + FileName); 14. if (tempfile.exists ()) {15. boolean delresult = tempfile.delete (); 16. System.out.println ("Удалить существующие файлы:" + delresult); 17.} 18. // Запуск сохранения файлов на сервере 19. if (! Filename.equals ("")) {20. fileOutputStream fos = new FileOutputStream (uploadFilePath + FileName); 21. byte [] buffer = new Byte [8192]; // Читать 8K байт каждый раз 22. int count = 0; 23. // Начните читать байты загруженного файла и выводить его на загруженный сервер, загруженный выходной поток 24. В то время как ((count = is.read (buffer))> 0) {25. fos.write (буфер, 0, count); // записать байт потока в файл сервера 26.} 27. fos.close (); // закрыть объект FileOutputStream 28. is.close (); // inputStream объект 29.} 30.} catch (filenotFoundException e) {31. e.printStackTrace (); 32.} Catch (ioException e) {33. e.printstackTrace (); 34.} 35.} 3. Загрузите файл в базу данных
1./** 2. * Новое - отправить и сохранить файл в базу данных 3. */ 4.@requestMapping (value = "Addaction.do") 5. Public String Add_Action (модель ModelMap, форма StudentForm) {6. inputStream IS = form.getStudentPhoto (). GetInputStream (); 7. byte [] studentPhotodata = new Byte [(int) form.getStudentPhoto (). GetSize ()]; 8. is.read (StudentPhotodata); 9. string filename = form.getStudentPhoto (). Getoriginalfilename (); 10. Photoentity Photoentity = New Photoentity (); 11. photoentity.setphotodata (StudentPhotodata); 12. photoEntity.setFileName (имя файла); 13. this.photomapper.createphoto (фотография); 14.} 4. Загрузите файл
Чтобы загрузить файл, вам необходимо восстановить байтовый массив в файл.
Во -первых, используйте Mybatis, чтобы узнать массив байтов в базе данных, и укажите имя файла (включая формат). Затем используйте outputStream для ввода файла
1.@requestMapping (value = "DownPhotobyId") 2. Public void DownPhotobyStudentId (String ID, окончательный httpservletresponse ответ) {3. photoentity entity = this.photomapper.getPhotoEntityByphotoid (id); 4. byte [] data = entity.getphotodata (); 5. string fileName = entity.getFilename () == NULL? "Photo.png": entity.getFilename (); 6. filename = urlencoder.encode (имя файла, "UTF-8"); 7. response.reset (); 8. response.setheader ("Содержимое-распада", "Приложение; filename =/" " + имя файла +"/""); 9. response.addheader («Длина контента», "" + data.length); 10. response.setContentType ("Приложение/Octet-Stream; charset = utf-8"); 11. outputStream outputStream = new BufferedOutputStream (response.getOutputStream ()); 12. outputstream.write (data); 13. outputstream.flush (); 14. outputstream.close (); 15.}<a href = "< %= request.getContextPath () %>/downphotobyid.do?id=8000001"> загрузка фотографий </a>
5. отображать файл изображения байта
1.@requestMapping (value = "getPotobyid") 2. Public void getPotobyId (идентификатор строки, окончательный ответ httpservletresponse) {3. photoentity entity = this.photomapper.getPhotoEntityByphotoid (id); 4. byte [] data = entity.getphotodata (); 5. response.setContentType ("Image/jpeg"); 6. response.setcharacterencoding ("UTF-8"); 7. outputStream outputsReam = response.getOutputStream (); 8. inputStream in = new BytearrayinputStream (data); 9. int len = 0; 10. byte [] buf = новый байт [1024]; 11. while ((len = in.read (buf, 0, 1024))! = -1) {12. outputsReam.write (buf, 0, len); 13.} 14. outputsReam.close (); 15.}<img src = "< %= request.getContextPath () %>/getPhotobyid.do?id=8000001"/>
6. масштабировать изображение по длине и ширине равные пропорции
1.@requestMapping (value = "getPotoid") 2. Public void getPhotobyId (идентификатор строки, ширина int, int height, окончательный ответ httpservletresponse) {3. photoentity entity = this.photomapper.getphotoentitybyphotoid (id); 4. byte [] data = entity.getphotodata (); 5. if (width! = 0 && height! = 0) {6. data = scaleMage (данные, ширина, высота); 7.} 8. response.setContentType ("Image/jpeg"); 9. response.setcharacterencoding ("UTF-8"); 10. outputStream outputsReam = response.getOutputStream (); 11. inputStream in = new BytearrayinputStream (data); 12. int len = 0; 13. byte [] buf = новый байт [1024]; 14. while ((len = in.read (buf, 0, 1024))! = -1) {15. outputsReam.write (buf, 0, len); 16.} 17. outputsReam.close (); 18.} 19. 20.public Static Byte [] ScaleMage (Byte [] Data, int width, int height) бросает ioexception {21. bufferedimage buffered_oldimage = imageio.read (new BytearrayinputStream (data)); 22. int ImageOldWidth = buffered_oldimage.getWidth (); 23. int ImageOldHeight = buffered_oldimage.getheight (); 24. Double Scale_x = (двойная) ширина / ImageOldWidth; 25. Double Scale_y = (Double) высота / ImageOldHeight; 26. Double Scale_xy = math.min (scale_x, scale_y); 27. int ImageNewWidth = (int) (ImageOldWidth * scale_xy); 28. int ImageNewHeight = (int) (ImageOldHeight * scale_xy); 29. BufferedImage buffered_newimage = new BufferedImage (ImageNewWidth, ImageNewHeight, BufferedImage.type_int_rgb); 30. buffered_newimage.getGraphics (). Drawimage (Buffered_oldimage.getScaledInstance (ImageNewWidth, ImageNewheight, BuffereMage.scale_smooth), 0, 0, NULL); 31. Buffered_newimage.getGraphics (). Dispose (); 32. BytearRayoutputStream outputStream = new BytearRayoutputStream (); 33. Imageio.write (Buffered_newimage, "jpeg", outputStream); 34. return outputstream.tobytearray (); 35.}<img src = "< %= request.getContextPath () %>/getPhotobyid.do?id=8000001&width=300&height=300"/>
Выше представлено комбинация Mybatis и Springmvc для реализации функций загрузки и загрузки файлов. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!