jsp+struts2单文件图片上传

今天突然要做图片上传,上个公司做过这个功能,但是代码没有备份,导致今天浪费了1个小时的时间,深感有用的代码要及时的做下记录。现将代码备份如下:

项目是ssh2框架,所以jsp中会有ognl代码,页面是更新页面,所以会有隐藏的原图片文件名,如果是新增页面将隐藏input去掉即可。

1、jsp页面代码

<form action="good!upOrSaveGood" method="post" enctype="multipart/form-data">
<input type="hidden" name="good.image" value="<s:property value="good.image"/>"/>
<input type="file" name="file" title="选择上传的文件"/>
<font style="color:red;margin-left:10px;font-size:12px;">图片格式必须为jpg,png,gif</font>
</form>


2、action代码

package com.cn.sysAction;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.List;

import javax.annotation.Resource;

import org.apache.struts2.ServletActionContext;

import com.cn.entity.Goods;
import com.cn.entity.GoodsCategory;
import com.cn.service.CateService;
import com.cn.service.GoodsService;
import com.opensymphony.xwork2.ActionSupport;

/**
* 项目名称:lineOrder
* 实现功能: 商品管理页面显示
* 类名称:LoginAction
* 类描述:(该类的主要功能)
* 创建人:
* 创建时间:2013-4-1 下午05:28:33
* 修改人:
* 修改时间:
* 修改备注:
* @version
*/
public class GoodsAction extends ActionSupport {

private static final long serialVersionUID = 1L;
@Resource(name="goodsServiceImpl")
public GoodsService goodsService;
public Goods good;
//--start----------文件上传----------------------
//代表上传文件的file对象
private File file;
//上传文件名
private String fileFileName;
//上传文件的MIME类型
private String fileContentType;
//保存上传文件的目录
private String uploadDir = "goodsImages";
//新文件名称
private String newFileName = null;
//原文件名
private String fileString;
//--end------------文件上传----------------------

/**
* @方法名称: upGood
* @描述: 更新或新增商品信息
* 创建人:
* @return String
* @param @return
*/
public String upOrSaveGood(){
try{
if(file!=null){
//上传图片
upload();
//如果是更新操作
if(good.getGid()!=null){
fileString = good.getImage();
//删除以前的图片
delGoodsImage(fileString);
}
//将新图片名称放入实体
good.setImage(newFileName);
}
//如果商品编号为空,表示为新增
if(good.getGid()==null){
goodsService.saveGood(good);
message = "保存成功!";
}else{

//如果商品编号不为空,表示为更新
goodsService.upGood(good);
message = "更新成功!";
}
}catch(Exception e){
message = "操作失败!";
}
return "upOrSaveGood";
}
/**
* @方法名称: copyImg
* @描述: 图片上传处理
* 创建人:
* @return void
* @param @param srcFile
* @param @param destFile
* @param @throws IOException
*/
public void upload() throws IOException{
// 得到当前时间自1970年1月1日0时0分0秒开始流逝的毫秒数,将这个毫秒数作为上传文件新的文件名。
long now = new Date().getTime();
// 得到保存上传文件的目录的真实路径
String path = ServletActionContext.getServletContext().getRealPath(uploadDir);
File dir = new File(path);
// 如果这个目录不存在,则创建它。
if (!dir.exists())
dir.mkdir();
int index = fileFileName.lastIndexOf('.');
// 判断上传文件名是否有扩展名
if (index != -1)
newFileName = now + fileFileName.substring(index);
else
newFileName = Long.toString(now);
BufferedOutputStream bos = null;
BufferedInputStream bis = null;
// 读取保存在临时目录下的上传文件,写入到新的文件中。
try {
FileInputStream fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
FileOutputStream fos = new FileOutputStream(new File(dir,newFileName));
bos = new BufferedOutputStream(fos);
byte[] buf = new byte[4096];
int len = -1;
while ((len = bis.read(buf)) != -1) {
bos.write(buf, 0, len);
}
} finally {
try {
if (null != bis)
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
if (null != bos)
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* @方法名称: delGoodsImage
* @描述: 删除图片
* 创建人:
* @return void
* @param @param fileString
*/
public void delGoodsImage(String fileString){
//判断商品是否有图片,如果为更新商品操作
if(fileString!=null&&!"".equals(fileString)){
String path = ServletActionContext.getServletContext().getRealPath(uploadDir);
File dir = new File(path+"/"+fileString);
// 如果这个文件已存在,则删除。
if (dir.isFile())
dir.delete();
}
}

public Goods getGood() {
return good;
}
public void setGood(Goods good) {
this.good = good;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
public String getUploadDir() {
return uploadDir;
}
public void setUploadDir(String uploadDir) {
this.uploadDir = uploadDir;
}
public String getNewFileName() {
return newFileName;
}
public void setNewFileName(String newFileName) {
this.newFileName = newFileName;
}

}



3、struts2.xml配置文件
<action name="good" class="com.cn.sysAction.GoodsAction">
<result name="goodDetail">/sysadmin/goodDetail.jsp</result>
<interceptor-ref name="defaultStack">
<param name="fileUpload.maximumSize">102400</param>
<param name="fileUpload.allowedTypes">
image/bmp,image/png,image/gif,image/jpeg,image/jpg,image/pjpeg ,image/bmp, image/gif, image/x-png,
</param>
</interceptor-ref>
</action>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值