SSH的图片上传和下载
记得修改表单的提交类型 :multipart/form-data
两种方法
- 使用dfs文件系统服务器方式,上传到项目中
- 把文件或图片转成byte保存到数据库中
保存到项目中
- 页面进行js代码判断上传类型
- 然后获取上传文件的后缀名提交给后台
//获取一个上传文件的扩展名
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;
- action代码把图片保存到项目中
- 使用绝对路径,因为是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保存到数据库中
- 修改数据库表的字段为blob类型,blob才能保存文件类型的byte
- 使用hibernate把实体类的jpa修改注解
- 使用request获取的时候,要把request转成struts2的包装request : MultiPartRequestWrapper
- 注意,图片太大还可以修改大小
- struts2 :
- spring : 10240
- 可以去看上面的参考文章
@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "IMAGE_BYTE", columnDefinition = "BLOB",nullable=true)
private byte[] imageByte;
- 保存到数据库中
@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();
}
}