关于文件上传问题
CLIENT HTML:
<br>
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
<form name="uploadform" action="mystruts2/fileUpload.action" method="post" enctype="multipart/form-data">
选择上传的文件: <input type="file" name="myFile"><br>
文件描述: <input type="text" name="fileDesc">
<input type="submit" name="btnUpload" value="上传">
</form>
<br>
ABOUT JAVA ACTION:
package com.gc.action;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.http.HttpServletRequest;
public class FileUploadAction extends ActionSupport{
private static final int BUFFER_SIZE = 1024*1024;
private File myFile;
private String fileName;
private String contentType;
private String fileDesc;
private String imageFileName;
/*
public File getMyFile() {
return myFile;
}
*/
public void setMyFile(File myFile) {
this.myFile = myFile;
}
/*
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
*/
/*
public String getMyFileContentType() {
return contentType;
}
*/
public void setMyFileContentType(String contentType) {
this.contentType = contentType;
}
public void setMyFileFileName(String fileName){
this.fileName=fileName;
}
public String getFileDesc() {
return fileDesc;
}
public void setFileDesc(String fileDesc) {
this.fileDesc = fileDesc;
}
public String getImageFileName() {
return imageFileName;
}
/*
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
*/
private static void copyFile(File src, File dst){
//key method copy file from client to server temp floder
try{
InputStream in=null;
OutputStream out=null;
try{
//in=new BufferedInputStream(new FileInputStream(src),BUFFER_SIZE);
//out=new BufferedOutputStream(new FileOutputStream(dst),BUFFER_SIZE);
in=new BufferedInputStream(new FileInputStream(src));
out=new BufferedOutputStream(new FileOutputStream(dst));
byte[] buffer=new byte[BUFFER_SIZE];
while(in.read(buffer)>0){
out.write(buffer);
}
}finally{
if(null != in) in.close();
if(null != out) out.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
private static String getExtention(String fileName){
int pos=fileName.lastIndexOf(".");
return fileName.substring(pos);
}
public String execute(){
try{
imageFileName=new Date().getTime()+this.getExtention(fileName);
String pathFileName=ServletActionContext.getServletContext().getRealPath("/uploadFile")+File.separator+imageFileName;
File imageFile=new File(pathFileName);
copyFile(myFile,imageFile);
//save image file name to reqeust
//ServletActionContext.getRequest().setAttribute("imageFileName", imageFileName);
HttpServletRequest request=ServletActionContext.getRequest();
request.setAttribute("imageFileName", imageFileName);
return SUCCESS;
}catch(Exception ex2){
return INPUT; //注意:错误返回的是INPUT,而不是ERROR
//return ERROR;
}
}
}