spring+mybaits+MySQL 实现图片上传并保存数据库

来源:互联网 发布:mac奶瓶双用粉底液色号 编辑:程序博客网 时间:2024/06/10 02:18
  • 前言:在用Java做一些小项目的时候,为了少许的图片上传做一个文件服务器不值得,所以最快最简便的方式就是直接保存到数据库中。
    因为部署的时候前后台有可能会分开部署公用一个库,所以把文件存到数据库是最好的办法之一。
  • 建表
 CREATE TABLE `tbl_file` (   `id` bigint(20) NOT NULL AUTO_INCREMENT,   `case_id` bigint(20) DEFAULT NULL,   `case_clazz`    varchar(255) DEFAULT NULL,   `images` mediumblob COMMENT '图片',      `size` double DEFAULT NULL COMMENT '大小',   `srcName` varchar(255)    DEFAULT NULL COMMENT '名称',   `unit` varchar(255) DEFAULT NULL COMMENT    '单位',   `create_time` datetime DEFAULT NULL,   `is_delete` char(1)    DEFAULT NULL,   PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=45    DEFAULT CHARSET=utf8; 
  • 引入js(我这里用的是ajaxfileupload.js)

  • 编码:

    1. model、dao、mapper这里不再描述,用mybatis自行生成

    2. service

@Overridepublic Long insertSelective(MultipartFile file) throws IOException {        File fileEO=new File();        String fileName = file.getOriginalFilename();        fileEO.setSrcname(fileName);        // 计算出文件的大小与现实单位(KB/MB)        long bytes = file.getSize();// bytes        String[] transferedArr = SXUnitUtils.byte2kbmb(bytes);        Double size = Double.valueOf(transferedArr[0]);        String unit = transferedArr[1];        fileEO.setSize(size);        fileEO.setUnit(unit);        //转换图片格式 :MultipartFile --> byte          byte[] images = file.getBytes();        fileEO.setImages(images);        fileEO.setCreateTime(new Date());        fileMapper.insertSelective(fileEO);        return fileEO.getId();    }
  3. controller
package com.bob.analyst.admin.controller;import java.io.BufferedInputStream;import java.io.ByteArrayInputStream;import java.io.UnsupportedEncodingException;import javax.annotation.Resource;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import com.bob.analyst.model.File;import com.bob.analyst.service.FileService;import com.bob.analyst.util.DeleteType;@Controller@RequestMapping(value = "/file")public class FileController  extends AjaxController {    @Resource    private FileService fileService;    @RequestMapping(value = "/upload")    @ResponseBody    public Long upload(@RequestParam(value = "file") MultipartFile file,                       HttpServletRequest request) throws Exception {        try {            return fileService.insertSelective(file);        } catch (Exception e) {            e.printStackTrace();            throw e;        }     }     @RequestMapping("showImage/{id}")     @ResponseBody     public byte[] showImage(@PathVariable("id") Long id, HttpServletResponse response) throws Exception {         File fileEO=fileService.selectByPrimaryKey(id);         if(fileEO==null||fileEO.getIsDelete().endsWith(DeleteType.IS_DELETE)){                throw new IllegalAccessException();         }         byte[] images = fileEO.getImages();         String fileName =fileEO.getSrcname().toLowerCase();         if (fileName.lastIndexOf(".jpg") == -1 && fileName.lastIndexOf(".png") == -1                    && fileName.lastIndexOf(".jpeg") == -1 && fileName.lastIndexOf(".gif") == -1                    && fileName.lastIndexOf(".bmp") == -1) {                BufferedInputStream bis = null;                ServletOutputStream fos = null;                byte[] buf = new byte[1024];                int size = 0;                bis = new BufferedInputStream(new ByteArrayInputStream(images));                response.setContentType("multipart/form-data");                String realfilename = "";                try {                    //防止乱码                    realfilename = new String(fileEO.getSrcname().getBytes("UTF-8"), "ISO8859-1");                } catch (UnsupportedEncodingException e) {                    e.printStackTrace();                }                //设置文件名                response.setHeader("Content-Disposition", "attachment;fileName=" + realfilename);                fos = response.getOutputStream();                while ((size = bis.read(buf)) != -1)                    fos.write(buf, 0, size);                fos.close();                bis.close();                return null;         }         return images;     }  }
  4.   jsp+js        在jsp中引入ajaxFileUpload,网上有这个插件的教程,这里不再描述。        需要注意的地方是 :        <input id="fileUpload" type="file" name="file" hidden="hidden">         id是在js中调用触发的,name是controller中对应的file:@RequestParam(value = "file") MultipartFile file   所以也是必须需要的。
   function ajaxFileUpload() {     //上传图片    $.ajaxFileUpload({        url: ctx+'/file/upload', //文件上传到哪个地址,告诉ajaxFileUpload        secureuri: false, //一般设置为false        fileElementId: 'fileUpload', //文件上传控件的Id  <input type="file" id="fileUpload" name="file" />        dataType: 'TEXT', //返回值类型(大写)小写在某些浏览器可能不成功        success:function(ajaxResult){      //服务器响应成功时的处理函数            var fileId = ajaxResult.replace(/<.*?>/ig, '');//ajaxFileUpload会对服务器响应回来的text内容加上<pre>text</pre>前后缀            $("#uploadedImage").attr("src",ctx+"/file/showImage/"+fileId);            $("#fileId").val(fileId);        },        error:function(data, status, e){ //服务器响应失败时的处理函数            alert("图片上传失败,请联系管理员!");        }    })    return false;} 
阅读全文
1 0
原创粉丝点击