`
单眼皮小猪
  • 浏览: 121440 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

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>


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics