import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.Action;
import org.apache.struts.upload.FormFile;
import noss4.common.dao.UCompanyDaoImpl;
import noss4.common.dao.UNetrelationImpl;
import noss4.wlpz.gcsj.dao.UProjectDataImpl;
import noss4.wlpz.gcsj.form.uploadForm;
public class UploadAction extends Action {
//说明:由于项目中用的spring 前面的三个类是通过spring 注入过的
//不用理会
UProjectDataImpl uprojectdataimpl;
UCompanyDaoImpl companyimpl;
UNetrelationImpl unetrelationimpl;
/**上传方法
* 参数file FormFile文件
* 参数 dir 上传路径 参数 newName 上传后新文件名
*/
public String doFormFile(FormFile file, String dir,String newName) {
try {
//根据路径形成文件
File f = new File(dir);
//判断文件是否存在 如果不存在则创建个新的
if (!f.exists()) {
f.mkdir();
}
//输入流
InputStream in = file.getInputStream();
//写入流
FileOutputStream writer = new FileOutputStream(dir + "/"
+ newName);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = in.read(buffer, 0, 8192)) != -1) {
writer.write(buffer, 0, bytesRead);
}
writer.flush();
writer.close();
in.close();
file.destroy();
} catch (Exception e) {
e.printStackTrace();
}
return file.getFileName();
}
//上传Action 说明:业务逻辑我给去掉了
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception {
//得到上传表单
uploadForm uploadImageForm = (uploadForm) form;
//得到表单的内容 可忽略不看
String nid=uploadImageForm.getNid();
String subcompid=uploadImageForm.getI_subcomp_id();
FormFile file = null;
String newname="";
//判断form表单 是否为空或是否有内容
if(uploadImageForm.getFile()!=null && !uploadImageForm.getFile().toString().equals("")) {
//如果有的话 则 得到文件
file = uploadImageForm.getFile();
//判断文件大小 可自定义
if(file.getFileSize()>(200*1024)) {
request.setAttribute("uploadInfo", "图片太大,图片不要超过200k!");
return mapping.findForward("manageimage");
}
//判断文件是否是图片 也可以判断其他格式
if(file.getContentType().equals("image/pjpeg")||file.getContentType().toLowerCase().equals("image/gif")) {
if(file.getContentType().equals("image/pjpeg"))
//下面是相关业务逻辑 可忽略 但newname 可自己跟自己需要定义
{
newname=subcompid+nid.replace("/", "")+".jpg";
}
if(file.getContentType().toLowerCase().equals("image/gif"))
{
newname=subcompid+nid.replace("/", "")+".gif";
}
//得到当前工程真实路径
String dir=request.getSession().getServletContext().getRealPath("/upload/");
//调用顶部文件上传方法
this.doFormFile(file,dir,newname);
String inserturl="upload/"+newname;
int sucess=uprojectdataimpl.inserurl(cells, inserturl);
if(sucess>0)
{
request.setAttribute("uploadInfo", "上传图片成功!");
}else
{
request.setAttribute("uploadInfo", "上传图片失败!");
}
return mapping.findForward("manageimage");
}
else {
request.setAttribute("uploadInfo", "图片格式不对,应该为 .gif||.jpg||.jpeg");
return mapping.findForward("manageimage");
}
}else {
request.setAttribute("uploadInfo", "请上传图片!");
return mapping.findForward("manageimage");
}
}
public void setUprojectdataimpl(UProjectDataImpl uprojectdataimpl) {
this.uprojectdataimpl = uprojectdataimpl;
}
public void setCompanyimpl(UCompanyDaoImpl companyimpl) {
this.companyimpl = companyimpl;
}
public void setUnetrelationimpl(UNetrelationImpl unetrelationimpl) {
this.unetrelationimpl = unetrelationimpl;
}
}
这是formbean
package noss4.wlpz.gcsj.form;
import org.apache.struts.action.ActionForm;
import org.apache.struts.upload.FormFile;
public class uploadForm extends ActionForm {
public uploadForm() {
}
private FormFile file;
private String fname;
private String size;
private String i_subcomp_id;
private String nid;
public String getFname() {
return fname;
}
public void setFname(String fname) {
this.fname = fname;
}
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getI_subcomp_id() {
return i_subcomp_id;
}
public void setI_subcomp_id(String i_subcomp_id) {
this.i_subcomp_id = i_subcomp_id;
}
public FormFile getFile() {
return file;
}
public void setFile(FormFile file) {
this.file = file;
}
public String getNid() {
return nid;
}
public void setNid(String nid) {
this.nid = nid;
}
}
这是Struts XML 文件配置 formbean
<form-beans>
<form-bean name="uploadform" type="noss4.wlpz.gcsj.form.uploadForm" >
<form-property name="file" type="org.apache.struts.upload.FormFile"></form-property>
<form-property name="fname" type="java.lang.String"></form-property>
<form-property name="size" type="java.lang.String"></form-property>
<form-property name="i_subcomp_id" type="java.lang.String"></form-property>
<form-property name="nid" type="java.lang.String"></form-property>
</form-bean>
</form-beans>
对了最后还有一个 跟上面的那个配置一起的 主要是把Actoin 与 formbean 绑定
name 就是要绑定formbean的名称
<action path="/gcsj/UploadAction" parameter="daili" type="noss4.wlpz.gcsj.action.UploadAction" name="uploadform">
<forward name="addpictrue" path="/noss4/wlpz/projectdata/addpictrue.jsp"></forward>
<forward name="manageimage" path="/noss4/wlpz/projectdata/manageimages.jsp"></forward>
</action>