Struts2文件上传,基本的配置如下:
UploadFileAction
- package jp.co.ricoh.action.upload;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.util.Date;
- import org.apache.struts2.ServletActionContext;
- import com.opensymphony.xwork2.ActionSupport;
- public class FileUploadAction extends ActionSupport {
- /**
- *
- */
- private static final long serialVersionUID = 7944571812664822722L;
- private static final int BUFFER_SIZE = 16 * 1024;
- private File file;
- private String contentType;
- private String fileName;
- private String imageFileName;
- private String caption;
- public File getFile() {
- return file;
- }
- public void setFile(File file) {
- this.file = file;
- }
- public String getFileContentType() {
- return contentType;
- }
- public void setFileContentType(String contentType) {
- this.contentType = contentType;
- }
- public String getFileFileName() {
- return fileName;
- }
- public void setFileFileName(String fileName) {
- this.fileName = fileName;
- }
- public String getImageFileName() {
- return imageFileName;
- }
- public void setImageFileName(String imageFileName) {
- this.imageFileName = imageFileName;
- }
- public String getCaption() {
- return caption;
- }
- public void setCaption(String caption) {
- this.caption = caption;
- }
- public static int getBufferSize() {
- return BUFFER_SIZE;
- }
- private static void copyFile(File src, File dest) {
- try {
- InputStream in = null;
- OutputStream out = null;
- try {
- in = new BufferedInputStream(new FileInputStream(src),
- BUFFER_SIZE);
- out = new BufferedOutputStream(new FileOutputStream(dest),
- BUFFER_SIZE);
- 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 e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private static String getExtention(String fileName) {
- int pos = fileName.lastIndexOf(".");
- return fileName.substring(pos);
- }
- @Override
- public String execute() throws Exception {
- imageFileName = new Date().getTime() + getExtention(fileName);
- File imageFile = new File(ServletActionContext.getServletContext()
- .getRealPath("/uploadFile") + "/" + imageFileName);
- System.out.println(imageFile.getName());
- copyFile(file, imageFile);
- return super.execute();
- }
- }
package jp.co.ricoh.action.upload;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 7944571812664822722L;
private static final int BUFFER_SIZE = 16 * 1024;
private File file;
private String contentType;
private String fileName;
private String imageFileName;
private String caption;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileContentType() {
return contentType;
}
public void setFileContentType(String contentType) {
this.contentType = contentType;
}
public String getFileFileName() {
return fileName;
}
public void setFileFileName(String fileName) {
this.fileName = fileName;
}
public String getImageFileName() {
return imageFileName;
}
public void setImageFileName(String imageFileName) {
this.imageFileName = imageFileName;
}
public String getCaption() {
return caption;
}
public void setCaption(String caption) {
this.caption = caption;
}
public static int getBufferSize() {
return BUFFER_SIZE;
}
private static void copyFile(File src, File dest) {
try {
InputStream in = null;
OutputStream out = null;
try {
in = new BufferedInputStream(new FileInputStream(src),
BUFFER_SIZE);
out = new BufferedOutputStream(new FileOutputStream(dest),
BUFFER_SIZE);
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 e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static String getExtention(String fileName) {
int pos = fileName.lastIndexOf(".");
return fileName.substring(pos);
}
@Override
public String execute() throws Exception {
imageFileName = new Date().getTime() + getExtention(fileName);
File imageFile = new File(ServletActionContext.getServletContext()
.getRealPath("/uploadFile") + "/" + imageFileName);
System.out.println(imageFile.getName());
copyFile(file, imageFile);
return super.execute();
}
}
struts.xml配置如下:
- <package name="upload" namespace="/" extends="struts-default">
- <action name="FileUploadAction" class="jp.co.ricoh.action.upload.FileUploadAction">
- <interceptor-ref name="fileUpload">
- <param name="allowedTypes">
- image/bmp,image/png,image/gif,image/jpeg,image/jpg,
- </param>
- </interceptor-ref>
- <interceptor-ref name="defaultStack"></interceptor-ref>
- <result name="input">/upload/upload.jsp</result>
- <result name="success">/upload/showUpload.jsp</result>
- </action>
- </package>
<package name="upload" namespace="/" extends="struts-default"> <action name="FileUploadAction" class="jp.co.ricoh.action.upload.FileUploadAction"> <interceptor-ref name="fileUpload"> <param name="allowedTypes"> image/bmp,image/png,image/gif,image/jpeg,image/jpg, </param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="input">/upload/upload.jsp</result> <result name="success">/upload/showUpload.jsp</result> </action> </package>
Upload.jsp
- <%@ page language="java" contentType="text/html; charset=utf-8"
- pageEncoding="utf-8"%>
- <%@ taglib prefix="s" uri="/struts-tags" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>Struts2 File Upload</title>
- </head>
- <body>
- <s:fielderror></s:fielderror>
- <s:form action="FileUploadAction" method="post" enctype="multipart/form-data">
- <s:file name="file" label="Image File"></s:file>
- <s:textfield name="caption" label="Caption"></s:textfield>
- <s:submit></s:submit>
- </s:form>
- </body>
- </html>
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Struts2 File Upload</title>
</head>
<body>
<s:fielderror></s:fielderror>
<s:form action="FileUploadAction" method="post" enctype="multipart/form-data">
<s:file name="file" label="Image File"></s:file>
<s:textfield name="caption" label="Caption"></s:textfield>
<s:submit></s:submit>
</s:form>
</body>
</html>
但是,我明明上传的文件格式是正确,还是出现:
- Content-Type not allowed: file "09poC_wallpapers.jpg" "upload_1ea6fe4e_13611ac7d7c__8000_00000012.tmp" image/pjpeg
Content-Type not allowed: file "09poC_wallpapers.jpg" "upload_1ea6fe4e_13611ac7d7c__8000_00000012.tmp" image/pjpeg |
.a : | application/octet-stream |
.ai : | application/postscript |
'.aif' : | 'audio/x-aiff', |
'.aifc' : | 'audio/x-aiff', |
'.aiff' : | 'audio/x-aiff', |
'.au' : ' | audio/basic', |
'.avi' : | 'video/x-msvideo', |
'.bat' : | 'text/plain', |
'.bcpio' : | 'application/x-bcpio', |
'.bin' : | 'application/octet-stream', |
'.bmp' : | 'image/x-ms-bmp', |
'.c' : | 'text/plain', |
# Duplicates :(
'.cdf' : | 'application/x-cdf', |
'.cdf' | : 'application/x-netcdf', |
'.cpio' : | 'application/x-cpio', |
'.csh' : | 'application/x-csh', |
'.css' : | 'text/css', |
'.dll' : | 'application/octet-stream', |
'.doc' : | 'application/msword', |
'.dot' : | 'application/msword', |
'.dvi' : | 'application/x-dvi', |
'.eml' : | 'message/rfc822', |
'.eps' : | 'application/postscript', |
'.etx' : | 'text/x-setext', |
'.exe' : | 'application/octet-stream', |
'.gif' : | 'image/gif', |
'.gtar' : | 'application/x-gtar', |
'.h' : | 'text/plain', |
'.hdf' : | 'application/x-hdf', |
'.htm' : | 'text/html', |
'.html' : | 'text/html', |
'.ief' : | 'image/ief', |
'.jpe' : | 'image/jpeg', |
'.jpeg' : | 'image/jpeg', |
'.jpg' : | 'image/jpeg', |
'.js' : | 'application/x-javascript', |
'.ksh' : | 'text/plain', |
'.latex' : | 'application/x-latex', |
'.m1v' : | 'video/mpeg', |
'.man' : | 'application/x-troff-man', |
'.me' : | 'application/x-troff-me', |
'.mht' : | 'message/rfc822', |
'.mhtml' : | 'message/rfc822', |
'.mif' : | 'application/x-mif', |
'.mov' : | 'video/quicktime', |
'.movie' : | 'video/x-sgi-movie', |
'.mp2' : | 'audio/mpeg', |
'.mp3' : | 'audio/mpeg', |
'.mpa' : | 'video/mpeg', |
'.mpe' : | 'video/mpeg', |
'.mpeg' : | 'video/mpeg', |
'.mpg' : | 'video/mpeg', |
'.ms' : | 'application/x-troff-ms', |
'.nc' : | 'application/x-netcdf', |
'.nws' : | 'message/rfc822', |
'.o' : | 'application/octet-stream', |
'.obj' : | 'application/octet-stream', |
'.oda' : | 'application/oda', |
'.p12' : | 'application/x-pkcs12', |
'.p7c' : | 'application/pkcs7-mime', |
'.pbm' : | 'image/x-portable-bitmap', |
'.pdf' : | 'application/pdf', |
'.pfx' : | 'application/x-pkcs12', |
'.pgm' : | 'image/x-portable-graymap', |
'.pl' : | 'text/plain', |
'.png' : | 'image/png', |
'.pnm' : | 'image/x-portable-anymap', |
'.pot' : | 'application/vnd.ms-powerpoint', |
'.ppa' : | 'application/vnd.ms-powerpoint', |
'.ppm' : | 'image/x-portable-pixmap', |
'.pps' : | 'application/vnd.ms-powerpoint', |
'.ppt' : | 'application/vnd.ms-powerpoint', |
'.ps' : | 'application/postscript', |
'.pwz' : | 'application/vnd.ms-powerpoint', |
'.py' : | 'text/x-python', |
'.pyc' : | 'application/x-python-code', |
'.pyo' : | 'application/x-python-code', |
'.qt' : | 'video/quicktime', |
'.ra' : | 'audio/x-pn-realaudio', |
'.ram' : | 'application/x-pn-realaudio', |
'.ras' : | 'image/x-cmu-raster', |
'.rdf' : | 'application/xml', |
'.rgb' : | 'image/x-rgb', |
'.roff' : | 'application/x-troff', |
'.rtx' : | 'text/richtext', |
'.sgm' : | 'text/x-sgml', |
'.sgml' : | 'text/x-sgml', |
'.sh' : | 'application/x-sh', |
'.shar' : | 'application/x-shar', |
'.snd' : | 'audio/basic', |
'.so' : | 'application/octet-stream', |
'.src' : | 'application/x-wais-source', |
'.sv4cpio': | 'application/x-sv4cpio', |
'.sv4crc' : | 'application/x-sv4crc', |
'.swf' : | 'application/x-shockwave-flash', |
'.t' : | 'application/x-troff', |
'.tar' : | 'application/x-tar', |
'.tcl' : | 'application/x-tcl', |
'.tex' : | 'application/x-tex', |
'.texi' : | 'application/x-texinfo', |
'.texinfo': | 'application/x-texinfo', |
'.tif' : | 'image/tiff', |
'.tiff' : | 'image/tiff', |
'.tr' : | 'application/x-troff', |
'.tsv' : | 'text/tab-separated-values', |
'.txt' : | 'text/plain', |
'.ustar' : | 'application/x-ustar', |
'.vcf' : | 'text/x-vcard', |
'.wav' : | 'audio/x-wav', |
'.wiz' : | 'application/msword', |
'.wsdl' : | 'application/xml', |
'.xbm' : | 'image/x-xbitmap', |
'.xlb' : | 'application/vnd.ms-excel', |
# Duplicates :(
'.xls' : | 'application/excel', |
'.xls' : | 'application/vnd.ms-excel', |
.xml : | text/xml |
.xpdl: | application/xml |
.xpm : | image/x-xpixmap |
.xsl : | application/xml |
.xwd : | image/x-xwindowdump |
.zip : | application/zip |
firefox 和 ie 的文件类型区别
Firefox: | image/jpeg, image/bmp, image/gif, image/png |
ie 6: | image/pjpeg ,image/bmp, image/gif, image/x-png |
ie 7: | image/pjpeg, image/bmp, image/gif, image/x-png |
ie 8: | image/pjpeg, image/bmp, image/gif, image/x-png |
Ie 9: | image/jpeg, image/bmp, image/gif, image/png |
所以在struts.xml配置文件中需要
<param name="allowedTypes">
image/png,image/gif,image/jpeg,image/jpg,
image/pjpeg ,image/bmp, image/x-png
</param>