当前位置:   article > 正文

数据库表保存图片_数据库建表照片怎么办

数据库建表照片怎么办

文章目录

  • 实现图片保存
  • 一、前端jsp实现from表单
  • 二、后端java实现文件保存
  • 路径保存到数据库
  • 总结


实现图片保存

图片是软件建设必不可少的保存信息之一,如何合适保存图片下面介绍两种方式。一种通过阿帕奇组件处理前端的图片,另一种是通过request实现前端传来的文件。

一、前端jsp实现from表单

  1. <form method="post" action="upload" class="pageForm required-validate" enctype="multipart/form-data" type='ewForm' size="{th:'25%'}" >
  2. <div class="pageFormContent" layoutH="0">
  3. <div class="ew-c-globalForm-content">
  4. <input type="file" name="importExcel" id="importExcel" multiple="multiple"/>
  5. </div>
  6. <input type="submit" caption="文件或者图片上传" >
  7. <input class="close" type="button" caption="关闭" value="关闭">
  8. </div>
  9. </form>

multiple实现的是多文件,多图片上传

二、java代码

  1. public IZrarResponse saveImportData(IZrarRequest req) throws Exception{
  2. IZrarResponse res = new ZrarResponse();
  3. String savePath = "D:\\";
  4. // 使用Apache文件上传组件处理文件上传步骤:
  5. // 1、创建一个DiskFileItemFactory工厂
  6. DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
  7. // 2、创建一个文件上传解析器
  8. ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
  9. // 解决上传文件名的中文乱码
  10. fileUpload.setHeaderEncoding("UTF-8");
  11. // 3、判断提交上来的数据是否是上传表单的数据
  12. if (!fileUpload.isMultipartContent(req.getHttpServletRequest())) {
  13. // 按照传统方式获取数据
  14. return null;
  15. }
  16. // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
  17. List<FileItem> fileItems = fileUpload.parseRequest(req.getHttpServletRequest());
  18. //赋值
  19. for (FileItem item : fileItems) {
  20. //附件表主键
  21. String md5Id = (new StringBuilder(String.valueOf(System.currentTimeMillis()))).toString();
  22. // 如果fileitem中封装的是上传文件,得到上传的文件名称,
  23. String fileName = item.getName();
  24. System.out.println(fileName);
  25. if (fileName == null || fileName.trim().equals("")) {
  26. continue;
  27. }
  28. // 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
  29. // c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
  30. // 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
  31. fileName = fileName.substring(fileName.lastIndexOf(File.separator) + 1);
  32. // 获取item中的上传文件的输入流
  33. InputStream inputStream = item.getInputStream();
  34. //创建一个文件输出流
  35. FileOutputStream out = new FileOutputStream(savePath + "\\" + fileName);
  36. //创建一个缓冲区
  37. byte buffer[] = new byte[1024];
  38. //判断输入流中的数据是否已经读完的标识
  39. int len = 0;
  40. //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
  41. while((len=inputStream.read(buffer))>0){
  42. //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
  43. out.write(buffer, 0, len);
  44. }
  45. //关闭输入流
  46. inputStream.close();
  47. //关闭输出流
  48. out.close();
  49. //删除处理文件上传时生成的临时文件
  50. item.delete();
  51. }
  52. return res;
  53. }

三、文件路径保存到数据库

这时候调用修改表的函数进行表修改

update stu set photo=? where sno=?

这样完成图片或者文件的上传

第二种实现方式:

1.

  1. <form action="/xx/file" method="post" enctype="multipart/form-data">
  2. <input type="intro" name="intro" /><br />
  3. <input type="file" name="filelist" /><br />
  4. <input type="file" name="filelist" /><br />
  5. <input type="file" name="filelist" /><br />
  6. <input type="submit" value="提交"/><br />
  7. </form>

2.controller处理前端form表单给的数据

  1. @RequestMapping("/file")
  2. public ModelAndView file(HttpServletRequest request) {
  3. //获取参数
  4. String intro = request.getParameter("intro");
  5. //保存文件
  6. HttpServletFileUtil.getFileJon(request);
  7. return new ModelAndView();
  8. }

3.处理文件或者图片

  1. public class HttpServletFileUtil {
  2. //系统内存的地址
  3. private static String FILEPATH_SYS = "";
  4. //服务器存放文件地址
  5. private static String FILEPATH = "";
  6. public static String getFileJon(HttpServletRequest request) {
  7. //文件名,多文件中间使用,号隔开,或直接存为数组,根据业务更改
  8. String fileJon = "";
  9. if (request instanceof MultipartHttpServletRequest) {
  10. MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
  11. List<MultipartFile> files = multipartHttpServletRequest.getFiles("filelist");
  12. Iterator<MultipartFile> iterator = files.iterator();
  13. while (iterator.hasNext()) {
  14. MultipartFile file = iterator.next();
  15. if (file != null && file.getSize() > 0) {
  16. try {
  17. //获取文件后缀
  18. // String filename = file.getContentType().substring(file.getContentType().lastIndexOf("/")).substring(1);
  19. //文件名
  20. String filedes = StringUtils.join(UUID.randomUUID().toString().replace("-", "") + ".jpg");
  21. //获取文件路径信息 保存文件用的地址
  22. String filepath = StringUtils.join(FILEPATH + filedes);
  23. //系统内保存用的
  24. String filepathSys = StringUtils.join(FILEPATH_SYS + filedes);
  25. //多文件地址存数据库,地址中间,号隔开
  26. if (StringUtils.isBlank(fileJon)) {
  27. fileJon = StringUtils.join(fileJon, filepathSys);
  28. } else {
  29. fileJon = StringUtils.join(fileJon + ",", filepathSys);
  30. }
  31. File sa = new File(filepath);
  32. file.transferTo(sa);
  33. } catch (IOException e) {
  34. e.printStackTrace();
  35. }
  36. }
  37. }
  38. } else {
  39. throw new Exception("相关图片不能为空");
  40. }
  41. return fileJon;
  42. }
  43. }

总结

数据库图片的处理有很多种。有直接在数据库表通过二进制实现图片的保存,有的是通过java代码实现图片保存,本文是通过保存图片路径的方式实现前端传来的数据。这种优点是能够减少数据库的压力,但是网站发布一定要创建相关文件保存信息。关于java代码的处理过程冗余,后续应该简单的实现文件保存到指定文件夹并调用数据库函数,实现路径的修改。图片的处理对于程序员来讲应该备份很多模板代码。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/800599
推荐阅读
相关标签
  

闽ICP备14008679号