SSH的图片上传和下载

SSH的图片上传和下载

记得修改表单的提交类型 :multipart/form-data

两种方法

  1. 使用dfs文件系统服务器方式,上传到项目中
  2. 把文件或图片转成byte保存到数据库中

保存到项目中

  1. 页面进行js代码判断上传类型
  2. 然后获取上传文件的后缀名提交给后台
//获取一个上传文件的扩展名
var myfile = document.getElementById('myfile');
//获取上传文件的扩展名
var filevalue = myfile.value;
var index = filevalue.lastIndexOf('.');
//alert(filevalue.substring(index));
$("#imgType").val(filevalue.substring(index));
isExists = true;
return true;
  1. action代码把图片保存到项目中
  2. 使用绝对路径,因为是dfs系统也没关系
private String imgType;
public String getImgType() {
    return imgType;
}
public void setImgType(String imgType) {
    this.imgType = imgType;
}
@Action(value = "productAction_insert")
public String insert() throws Exception {
    //获得属性驱动
    Product product = getModel();
    //获得request
    HttpServletRequest request = ServletActionContext.getRequest();
//        String productImage = request.getParameter("productImage");
    //转换成struts2的包装request
    MultiPartRequestWrapper mr = (MultiPartRequestWrapper) request;
    //获取request中的文件参数的数据
    File[] productImages = mr.getFiles("productImage");
    byte[] bytes = null;
    if (productImages != null && productImages.length > 0) {
        //file转成byte
        bytes = getBytesByFile(productImages[0]);
    }
    //把byte保存到数据库中
    product.setImageByte(bytes);

    String fieldValue = "/images/pro/"+product.getProductNo();
//        String name = productImages[0].getName();
//        String[] split = productImages[0].getName().split("\\.");
    //待会输出到项目文件夹的绝对路径
    String filg = "D:\\workspace\\ilcps-server\\ilcps-web\\src\\main\\webapp\\images\\pro\\"+product.getProductNo()+imgType;
    //以下代码完成上传文件
    OutputStream os = new FileOutputStream(new File(filg));
    //输出
    os.write(bytes);
    //关闭流
    IOUtils.closeQuietly(os);

    product.setProductImage(fieldValue+imgType);
    Factory factory2 = factoryService.findOne(getModel().getFactory().getId());
    if (factory2 != null) {
        product.setFactoryName(factory2.getFactoryName());
    }

    //3.1 调用service新增保存
    productService.saveOrupdate(product);
    //3.2保存成功,跳转到列表
    return "productList";
}

使用byte保存到数据库中

  1. 修改数据库表的字段为blob类型,blob才能保存文件类型的byte
  2. 使用hibernate把实体类的jpa修改注解
  3. 使用request获取的时候,要把request转成struts2的包装request : MultiPartRequestWrapper
  4. 注意,图片太大还可以修改大小
    • struts2 :
    • spring : 10240
    • 可以去看上面的参考文章
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "IMAGE_BYTE", columnDefinition = "BLOB",nullable=true)
private byte[] imageByte;
  1. 保存到数据库中
@Action(value = "productAction_insert")
public String insert() throws Exception {
    //获得属性驱动
    Product product = getModel();
    //获得request
    HttpServletRequest request = ServletActionContext.getRequest();
//        String productImage = request.getParameter("productImage");
    //转换成struts2的包装request
    MultiPartRequestWrapper mr = (MultiPartRequestWrapper) request;
    //获取request中的文件参数的数据
    File[] productImages = mr.getFiles("productImage");
    byte[] bytes = null;
    if (productImages != null && productImages.length > 0) {
        //file转成byte
        bytes = getBytesByFile(productImages[0]);
    }
    //把byte保存到数据库中
    product.setImageByte(bytes);
  • 把图片回显到页面
<img  src="${ctx }/pro/productAction_getImageByte?productId=${productId}" width='40px' height='30px'>
  • action
/**
 * 返回字节码图片
 */
@Action("productAction_getImageByte")
public void productAction_getImageByte(){
    HttpServletResponse response = ServletActionContext.getResponse();
    OutputStream sout = null;
    String productId = getModel().getProductId();
    Product product = productService.findOne(productId);
    byte[] bytes = product.getImageByte();
    try {
        response.setContentType("text/html");
        sout = response.getOutputStream();
        sout.write(bytes);
        sout.flush();
        sout.close();
        sout = null;
    } catch (IOException e) {
        e.printStackTrace();
    }
}

猜你喜欢

转载自blog.csdn.net/kato_op/article/details/80214584