今天突然要做图片上传,上个公司做过这个功能,但是代码没有备份,导致今天浪费了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(JavaServer Pages)和Struts框架实现文件上传功能。这是一个在Web开发中常见的需求,特别是在处理用户提交的数据时。Struts是一个基于MVC(Model-View-Controller)设计模式的...
- `config`:配置文件目录,可能包含Struts2的配置文件(如struts.xml)、MyBatis的配置文件(如mybatis-config.xml和Mapper XML文件)以及数据库连接配置等。 - `WebContent`:Web应用的根目录,包含静态资源(如...
与JSP不同的是,Servlet更偏向于逻辑控制和业务处理,通常用于处理表单提交的数据、数据库连接、文件上传下载等操作。Java的Servlet API提供了一系列的接口和类,使得开发者可以专注于业务逻辑的实现。 Ajax...
2. 文档管理:提供上传、下载、编辑、分享文档的功能,支持多种文件格式。 3. 工作流管理:定义和执行各种工作流程,如审批流程、任务分配等。 4. 通知公告:发布内部通知和公告,确保信息的及时传递。 5. 考勤管理...
在Struts2中,我们可以使用`CommonsFileUpload`库来处理文件上传,该库能够解析HTTP请求中的多部分数据,将图片文件从客户端传输到服务器端。 实现CKEditor图片上传到Struts2的步骤大致如下: 1. **配置CKEditor**...
在本文中,我们将深入探讨如何使用jQuery、Uploadify、Struts2和JSP技术实现一个图片批量上传的Demo。这个组合提供了高效、用户友好的文件上传解决方案,特别适合需要处理大量图片的Web应用。 首先,jQuery是一个轻...
在我们的场景中,Struts2将接收来自CKEditor的图片上传请求,处理文件上传逻辑,然后通过JSON返回结果。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...
2. **处理文件上传**:当用户提交表单时,请求会被发送到Struts配置中的Action类。在Action中,我们可以使用Apache Commons FileUpload库来解析请求的多部分数据,获取到上传的图片文件。 3. **存储图片**:接收到...
在本文中,我们将深入探讨如何使用jQuery和Struts2框架实现文件上传功能。这是一个常见的需求,在Web应用中,用户可能需要上传图片、文档等文件。jQuery是一个轻量级的JavaScript库,提供了丰富的交互效果和API,而...
- **增强的拦截器**:新增了一些拦截器,例如文件上传/下载拦截器,增强了框架的功能性和灵活性。 - **自定义标签库**:允许开发者创建自己的标签库,提高开发效率和代码复用率。 - **国际化支持**:提供了更好的...
在Struts2中,我们可以利用`Struts2`的`FileUpload interceptor`来处理文件上传。这个拦截器能够解析请求中的文件内容,并将其转换为`Action`类中的属性。在`Action`类中,我们可以定义一个或多个`File`类型的字段,...
在文件列表中提到的"web购物网站"可能是指整个项目工程的根目录,其中包含了Web应用的所有资源,如JSP页面、Struts配置文件、Java源代码、CSS样式文件、JavaScript脚本以及可能的图片和其他静态资源。开发者需要将这...
压缩文件中不包含Jar文件(由于全部的Jar将近12M,不能全部上传),所用到的Jar目录为,工程中再也不会出现由于MyEclipse自动整合而出现的大量Jar文件 : Java代码 1. //如果不用,启动时不会出错,但使用Dwr时,会...
它利用JSP处理用户交互,Struts2作为MVC框架协调请求和响应,文件上传功能允许用户上传图片,而图像比对算法则在后台进行相似图片的查找。这个项目展示了如何将这些技术整合起来,实现一个基本的以图搜图功能。通过...
struts2+jsp 文件上传,供大家一起共同分享学习。
【Spring+Struts+Hibernate 实现文件上传和下载】 在 J2EE 开发中,文件的上传和下载是一项基础但重要的功能。SSH(Struts、Spring、Hibernate)框架提供了便捷的方式来处理这一问题,无需依赖像 SmartUpload 或 ...
3. **Struts2配置**:在Struts2的配置文件(struts.xml)中,定义一个Action类,该类将处理文件上传请求。Action类需要继承`org.apache.struts2.upload.FormFile`接口,以便接收和处理上传的文件。 4. **Action处理...
**JSP+Struts+Hibernate办公自动化管理系统** 这个系统是一个基于Web的办公自动化解决方案,它采用了经典的Java EE技术栈——JSP(JavaServer Pages)、Struts框架和Hibernate ORM(对象关系映射)工具。这样的技术...
Struts通过Action、ActionForm、配置文件(struts-config.xml)等组件,将请求分发到相应的业务逻辑,进而控制视图的展示。在“JSP+Struts企业办公自动化”中,Struts负责处理HTTP请求,调用后台服务,进行数据操作...
在文件管理系统中,JSP可以用于构建用户界面,处理用户请求,并呈现文件信息。 【Struts】是基于MVC(Model-View-Controller)设计模式的Java Web框架。它提供了结构化的控制流程,将业务逻辑、表示层和数据模型...