根据struts的FormFile来上传文件
package com.score.web.action.picture;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
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.upload.FormFile;
import com.score.model.members.ScoreMembers;
import com.score.model.picture.ScorePhoto;
import com.score.service.exception.BeanAlreadyExistsException;
import com.score.service.picture.ScorePhotoManager;
import com.score.web.action.core.BaseAction;
import com.score.web.action.upload.UploadFileForm;
public class CreatePhotoAction extends BaseAction{
??public ActionForward execute(ActionMapping mapping, ActionForm actionForm,
????HttpServletRequest request, HttpServletResponse response) {
?
????UploadFileForm uploadForm = (UploadFileForm) actionForm;
????FormFile file = uploadForm.getFileForm();
????
????if(file.getContentType().equals("image/jpeg")){ //判断类型
?????System.out.println("jpeg 类型");
????}else if(file.getContentType().equals("image/png")){
?????System.out.println("png 类型");
????}else if(file.getContentType().equals("image/gif")){
?????System.out.println("gif 类型");
????}else if(file.getContentType().equals("image/pjpeg")){
?????System.out.println("jpg 类型");
????}else{
?????System.out.println("不是图片!");
?????request.setAttribute("errorFlag", "1");
?????return mapping.findForward("listpicture");
????}
???
???? ????if(file.getFileSize()>2097152){ //判断大小
?????System.out.println("大于2M");
?????request.getSession().setAttribute("errorFlag",2);
?????return mapping.findForward("listpicture");
????}
????
????String uri = membersHead(request,file);
????request.setAttribute("uri", uri);
????
????ScorePhotoManager spm=(ScorePhotoManager)getBean("scorePhotoManager");
????ScorePhoto sp=new ScorePhoto();
????sp.setPhotoAddr(uri);
????try {
?????spm.createScorePhoto(sp);
????} catch (BeanAlreadyExistsException e) {
?????// TODO Auto-generated catch block
?????e.printStackTrace();
????}
????request.getSession().setAttribute("errorFlag",1);
????return mapping.findForward("listpicture");
???}
//membersHead方法可以写到service层,然后调用,此处为方便理解,写在action中
//membersHead方法判断文件的大小和类型
??// 会员资料文件
??public String membersHead(HttpServletRequest request,FormFile file) {
???String uri = "";
???String dir = servlet.getServletContext().getRealPath("/upload");
???// 文件夹
???File dirFile = null;
???boolean bFile = false;
???dirFile = new File(dir);
???bFile = dirFile.exists();// true 该文件夹存在,false 不存在
???if (bFile == false) {
????bFile = dirFile.mkdirs();
????if (bFile == false) {
?????System.out.println(" 文件夹创建失败!");
????}
???}
???if (bFile == true) {
????try {
?????InputStream input = file.getInputStream();// 能从FormFile中获得输入流
?????String uid = UUID.randomUUID().toString();
?????String fileName = file.getFileName();
?????fileName = uid + fileName.substring(fileName.lastIndexOf("."));
?????OutputStream output = new FileOutputStream(dir + "/" + fileName);
?????int bytesReader = 0;
?????byte[] readbuffer = new byte[102400];
?????while ((bytesReader = input.read(readbuffer, 0, 102400)) != -1) {
??????output.write(readbuffer, 0, bytesReader);
?????}
?????output.close();
?????String protco = request.getProtocol().substring(0,
???????request.getProtocol().indexOf("/"));
?????String webPath = protco + "://" + request.getServerName() + ":"
???????+ request.getServerPort();
?????// 资料路径
?????uri = webPath + "/upload/"+ fileName;
????} catch (Exception e) {
?????e.printStackTrace();
????}
???}
???return uri;
???
??}
??
?}
附:
/**
?* 所要上传的文件的Form
?* @author UploadFileForm?
?* @version $Revision: $ $Date: $
?*/
public class UploadFileForm extends BaseForm implements java.io.Serializable{
?
?private FormFile file;
?public FormFile getFile() {
??return file;
?}
?public void setFile(FormFile file) {
??this.file = file;
?}
}