现在准备在做一个图片上传的小项目,陆续会在博客上公开我的代码。
这里准备使用Struts来做,我用的IDE是MyEclipse 6.5,使用的Struts版本是1.3,我现在保存了开心网,就是kaixin001的照片上传的代码作为我的项目页面。准备逐渐破解它的页面结构来满足我的需求。
首先是上传图片需要的FormBean,PhotoForm
package com.tntxia.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
public class PhotoForm extends ActionForm {
private FormFile photo;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {
return null;
}
public void reset(ActionMapping mapping, HttpServletRequest request) {
}
public FormFile getPhoto() {
return photo;
}
public void setPhoto(FormFile photo) {
this.photo = photo;
}
}
下面是图片上传使用的Action类:
package com.tntxia.struts.action;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.upload.FormFile;
import com.tntxia.db.util.DBUtil;
import com.tntxia.struts.form.PhotoForm;
public class UploadFileAction extends Action {
/**
* Method execute
* @param mapping
* @param form
* @param request
* @param response
* @return ActionForward
*/
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
PhotoForm userForm = (PhotoForm)form;
FormFile file = userForm.getPhoto();
try{
UUID uuid = UUID.randomUUID();
String pre = uuid.toString();
String ext = file.getFileName().substring(file.getFileName().lastIndexOf("."));
File saveFile = new File(this.getServlet().getServletContext().getRealPath("/")+"\\upload",pre+ext);
InputStream in = file.getInputStream();
FileOutputStream out = new FileOutputStream(saveFile);
int len = 0;
byte[] buf = new byte[1024];
while((len = in.read(buf))!=-1){
out.write(buf,0,len);
}
in.close();
out.close();
response.setContentType("text/html;charset=GBK");
response.getWriter().print(file.getFileName());
ArrayList<String> params = new ArrayList<String>();
params.add(userForm.getName());
params.add(pre+ext);
DBUtil.executePreparedSQL("insert into photo(name,fileName) values(?,?)", params);
ArrayList<String> cols = new ArrayList<String>();
cols.add("name");
cols.add("fileName");
Map<String,ArrayList<String>> result = DBUtil.getArrayResult(cols, "select * from photo");
request.setAttribute("result", result);
}catch(Exception e){
e.printStackTrace();
}
return mapping.findForward("/success");
}
}