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;
}
}