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(); } }
?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>
?
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>
?
但是,我明明上传的文件格式是正确,还是出现:
- 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/bmp,image/png,image/gif,image/jpeg,image/jpg,
??????image/pjpeg ,image/bmp, image/gif, image/x-png,
</param>
?