赞
踩
图片是软件建设必不可少的保存信息之一,如何合适保存图片下面介绍两种方式。一种通过阿帕奇组件处理前端的图片,另一种是通过request实现前端传来的文件。
- <form method="post" action="upload" class="pageForm required-validate" enctype="multipart/form-data" type='ewForm' size="{th:'25%'}" >
- <div class="pageFormContent" layoutH="0">
- <div class="ew-c-globalForm-content">
-
- <input type="file" name="importExcel" id="importExcel" multiple="multiple"/>
-
- </div>
- <input type="submit" caption="文件或者图片上传" >
- <input class="close" type="button" caption="关闭" value="关闭">
- </div>
- </form>
- public IZrarResponse saveImportData(IZrarRequest req) throws Exception{
- IZrarResponse res = new ZrarResponse();
- String savePath = "D:\\";
- // 使用Apache文件上传组件处理文件上传步骤:
- // 1、创建一个DiskFileItemFactory工厂
- DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
- // 2、创建一个文件上传解析器
- ServletFileUpload fileUpload = new ServletFileUpload(diskFileItemFactory);
- // 解决上传文件名的中文乱码
- fileUpload.setHeaderEncoding("UTF-8");
- // 3、判断提交上来的数据是否是上传表单的数据
- if (!fileUpload.isMultipartContent(req.getHttpServletRequest())) {
- // 按照传统方式获取数据
- return null;
- }
- // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
- List<FileItem> fileItems = fileUpload.parseRequest(req.getHttpServletRequest());
- //赋值
- for (FileItem item : fileItems) {
- //附件表主键
- String md5Id = (new StringBuilder(String.valueOf(System.currentTimeMillis()))).toString();
- // 如果fileitem中封装的是上传文件,得到上传的文件名称,
- String fileName = item.getName();
- System.out.println(fileName);
- if (fileName == null || fileName.trim().equals("")) {
- continue;
- }
- // 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:
- // c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
- // 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
- fileName = fileName.substring(fileName.lastIndexOf(File.separator) + 1);
- // 获取item中的上传文件的输入流
- InputStream inputStream = item.getInputStream();
- //创建一个文件输出流
- FileOutputStream out = new FileOutputStream(savePath + "\\" + fileName);
- //创建一个缓冲区
- byte buffer[] = new byte[1024];
- //判断输入流中的数据是否已经读完的标识
- int len = 0;
- //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
- while((len=inputStream.read(buffer))>0){
- //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中
- out.write(buffer, 0, len);
- }
- //关闭输入流
- inputStream.close();
- //关闭输出流
- out.close();
- //删除处理文件上传时生成的临时文件
- item.delete();
- }
- return res;
- }

这时候调用修改表的函数进行表修改
update stu set photo=? where sno=?
这样完成图片或者文件的上传
第二种实现方式:
1.
- <form action="/xx/file" method="post" enctype="multipart/form-data">
- <input type="intro" name="intro" /><br />
- <input type="file" name="filelist" /><br />
- <input type="file" name="filelist" /><br />
- <input type="file" name="filelist" /><br />
- <input type="submit" value="提交"/><br />
- </form>
2.controller处理前端form表单给的数据
- @RequestMapping("/file")
- public ModelAndView file(HttpServletRequest request) {
- //获取参数
- String intro = request.getParameter("intro");
- //保存文件
- HttpServletFileUtil.getFileJon(request);
- return new ModelAndView();
- }
3.处理文件或者图片
- public class HttpServletFileUtil {
- //系统内存的地址
- private static String FILEPATH_SYS = "";
- //服务器存放文件地址
- private static String FILEPATH = "";
-
- public static String getFileJon(HttpServletRequest request) {
-
- //文件名,多文件中间使用,号隔开,或直接存为数组,根据业务更改
- String fileJon = "";
-
- if (request instanceof MultipartHttpServletRequest) {
- MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest) request;
- List<MultipartFile> files = multipartHttpServletRequest.getFiles("filelist");
- Iterator<MultipartFile> iterator = files.iterator();
- while (iterator.hasNext()) {
-
- MultipartFile file = iterator.next();
- if (file != null && file.getSize() > 0) {
- try {
- //获取文件后缀
- // String filename = file.getContentType().substring(file.getContentType().lastIndexOf("/")).substring(1);
- //文件名
- String filedes = StringUtils.join(UUID.randomUUID().toString().replace("-", "") + ".jpg");
- //获取文件路径信息 保存文件用的地址
- String filepath = StringUtils.join(FILEPATH + filedes);
-
- //系统内保存用的
- String filepathSys = StringUtils.join(FILEPATH_SYS + filedes);
-
- //多文件地址存数据库,地址中间,号隔开
- if (StringUtils.isBlank(fileJon)) {
- fileJon = StringUtils.join(fileJon, filepathSys);
- } else {
- fileJon = StringUtils.join(fileJon + ",", filepathSys);
- }
-
- File sa = new File(filepath);
- file.transferTo(sa);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- } else {
- throw new Exception("相关图片不能为空");
- }
- return fileJon;
- }
- }

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