`
单眼皮小猪
  • 浏览: 122809 次
  • 性别: 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>


分享到:
评论

相关推荐

    jsp+struts文件上传

    在本文中,我们将深入探讨如何使用JSP(JavaServer Pages)和Struts框架实现文件上传功能。这是一个在Web开发中常见的需求,特别是在处理用户提交的数据时。Struts是一个基于MVC(Model-View-Controller)设计模式的...

    jsp+Struts2 +mybatis 注册 登录 入门demo

    - `config`:配置文件目录,可能包含Struts2的配置文件(如struts.xml)、MyBatis的配置文件(如mybatis-config.xml和Mapper XML文件)以及数据库连接配置等。 - `WebContent`:Web应用的根目录,包含静态资源(如...

    java web 实战宝典_JSP+Servlet+Struts_2+Hibernate+Spring+Ajax

    与JSP不同的是,Servlet更偏向于逻辑控制和业务处理,通常用于处理表单提交的数据、数据库连接、文件上传下载等操作。Java的Servlet API提供了一系列的接口和类,使得开发者可以专注于业务逻辑的实现。 Ajax...

    JSP+Struts+Hibernate办公自动化管理系统

    2. 文档管理:提供上传、下载、编辑、分享文档的功能,支持多种文件格式。 3. 工作流管理:定义和执行各种工作流程,如审批流程、任务分配等。 4. 通知公告:发布内部通知和公告,确保信息的及时传递。 5. 考勤管理...

    ckeditor+struts2上传图片

    在Struts2中,我们可以使用`CommonsFileUpload`库来处理文件上传,该库能够解析HTTP请求中的多部分数据,将图片文件从客户端传输到服务器端。 实现CKEditor图片上传到Struts2的步骤大致如下: 1. **配置CKEditor**...

    jquery+uploadify + struts2 + jsp 图片批量上传Demo

    在本文中,我们将深入探讨如何使用jQuery、Uploadify、Struts2和JSP技术实现一个图片批量上传的Demo。这个组合提供了高效、用户友好的文件上传解决方案,特别适合需要处理大量图片的Web应用。 首先,jQuery是一个轻...

    ckedit+jsp+struts2+json上传图片.rar

    在我们的场景中,Struts2将接收来自CKEditor的图片上传请求,处理文件上传逻辑,然后通过JSON返回结果。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

    jsp+struts技术实现图片的上传与下载

    2. **处理文件上传**:当用户提交表单时,请求会被发送到Struts配置中的Action类。在Action中,我们可以使用Apache Commons FileUpload库来解析请求的多部分数据,获取到上传的图片文件。 3. **存储图片**:接收到...

    jquery+struts2实现文件上传

    在本文中,我们将深入探讨如何使用jQuery和Struts2框架实现文件上传功能。这是一个常见的需求,在Web应用中,用户可能需要上传图片、文档等文件。jQuery是一个轻量级的JavaScript库,提供了丰富的交互效果和API,而...

    精通Java Web整合开发(Jsp+Ajax+Struts+Hibernate)(第2版).part1

    - **增强的拦截器**:新增了一些拦截器,例如文件上传/下载拦截器,增强了框架的功能性和灵活性。 - **自定义标签库**:允许开发者创建自己的标签库,提高开发效率和代码复用率。 - **国际化支持**:提供了更好的...

    struts2+extjs3 单/多文件上传

    在Struts2中,我们可以利用`Struts2`的`FileUpload interceptor`来处理文件上传。这个拦截器能够解析请求中的文件内容,并将其转换为`Action`类中的属性。在`Action`类中,我们可以定义一个或多个`File`类型的字段,...

    jsp+struts+mysql支持支持添加分类及商品文件上传

    在文件列表中提到的"web购物网站"可能是指整个项目工程的根目录,其中包含了Web应用的所有资源,如JSP页面、Struts配置文件、Java源代码、CSS样式文件、JavaScript脚本以及可能的图片和其他静态资源。开发者需要将这...

    用户注册和登录是每个系统的必须存在的一部分,基于Dwr+Struts2+Spring+Hibernate写了一个用户登录注册系统

     压缩文件中不包含Jar文件(由于全部的Jar将近12M,不能全部上传),所用到的Jar目录为,工程中再也不会出现由于MyEclipse自动整合而出现的大量Jar文件 : Java代码 1. //如果不用,启动时不会出错,但使用Dwr时,会...

    jsp+struts2 编写的以图搜图demo

    它利用JSP处理用户交互,Struts2作为MVC框架协调请求和响应,文件上传功能允许用户上传图片,而图像比对算法则在后台进行相似图片的查找。这个项目展示了如何将这些技术整合起来,实现一个基本的以图搜图功能。通过...

    struts2+jsp 文件上传

    struts2+jsp 文件上传,供大家一起共同分享学习。

    spring+struts+hibernate实现文件的上传和下载

    【Spring+Struts+Hibernate 实现文件上传和下载】 在 J2EE 开发中,文件的上传和下载是一项基础但重要的功能。SSH(Struts、Spring、Hibernate)框架提供了便捷的方式来处理这一问题,无需依赖像 SmartUpload 或 ...

    Ext+Struts2多文件上传

    3. **Struts2配置**:在Struts2的配置文件(struts.xml)中,定义一个Action类,该类将处理文件上传请求。Action类需要继承`org.apache.struts2.upload.FormFile`接口,以便接收和处理上传的文件。 4. **Action处理...

    JSP+Struts+hibernate办公自动化管理系统

    **JSP+Struts+Hibernate办公自动化管理系统** 这个系统是一个基于Web的办公自动化解决方案,它采用了经典的Java EE技术栈——JSP(JavaServer Pages)、Struts框架和Hibernate ORM(对象关系映射)工具。这样的技术...

    JSP+struts企业办公自动化

    Struts通过Action、ActionForm、配置文件(struts-config.xml)等组件,将请求分发到相应的业务逻辑,进而控制视图的展示。在“JSP+Struts企业办公自动化”中,Struts负责处理HTTP请求,调用后台服务,进行数据操作...

    文件管理系统+JSP+Struts+hibernate+Spring

    在文件管理系统中,JSP可以用于构建用户界面,处理用户请求,并呈现文件信息。 【Struts】是基于MVC(Model-View-Controller)设计模式的Java Web框架。它提供了结构化的控制流程,将业务逻辑、表示层和数据模型...

Global site tag (gtag.js) - Google Analytics