sturts2中上传文件拦截器参数allowedType注意事项

来源:互联网 发布:popo for mac 编辑:程序博客网 时间:2024/05/17 09:14

Struts2文件上传,基本的配置如下:

UploadFileAction

Java代码 复制代码 收藏代码
  1. package jp.co.ricoh.action.upload;   
  2.   
  3. import java.io.BufferedInputStream;   
  4. import java.io.BufferedOutputStream;   
  5. import java.io.File;   
  6. import java.io.FileInputStream;   
  7. import java.io.FileOutputStream;   
  8. import java.io.InputStream;   
  9. import java.io.OutputStream;   
  10. import java.util.Date;   
  11.   
  12. import org.apache.struts2.ServletActionContext;   
  13.   
  14. import com.opensymphony.xwork2.ActionSupport;   
  15.   
  16. public class FileUploadAction extends ActionSupport {   
  17.     /**  
  18.      *   
  19.      */  
  20.     private static final long serialVersionUID = 7944571812664822722L;   
  21.     private static final int BUFFER_SIZE = 16 * 1024;   
  22.     private File file;   
  23.     private String contentType;   
  24.     private String fileName;   
  25.     private String imageFileName;   
  26.     private String caption;   
  27.   
  28.     public File getFile() {   
  29.         return file;   
  30.     }   
  31.   
  32.     public void setFile(File file) {   
  33.         this.file = file;   
  34.     }   
  35.   
  36.     public String getFileContentType() {   
  37.         return contentType;   
  38.     }   
  39.   
  40.     public void setFileContentType(String contentType) {   
  41.         this.contentType = contentType;   
  42.     }   
  43.   
  44.     public String getFileFileName() {   
  45.         return fileName;   
  46.     }   
  47.   
  48.     public void setFileFileName(String fileName) {   
  49.         this.fileName = fileName;   
  50.     }   
  51.   
  52.     public String getImageFileName() {   
  53.         return imageFileName;   
  54.     }   
  55.   
  56.     public void setImageFileName(String imageFileName) {   
  57.         this.imageFileName = imageFileName;   
  58.     }   
  59.   
  60.     public String getCaption() {   
  61.         return caption;   
  62.     }   
  63.   
  64.     public void setCaption(String caption) {   
  65.         this.caption = caption;   
  66.     }   
  67.   
  68.     public static int getBufferSize() {   
  69.         return BUFFER_SIZE;   
  70.     }   
  71.   
  72.     private static void copyFile(File src, File dest) {   
  73.         try {   
  74.             InputStream in = null;   
  75.             OutputStream out = null;   
  76.             try {   
  77.                 in = new BufferedInputStream(new FileInputStream(src),   
  78.                         BUFFER_SIZE);   
  79.                 out = new BufferedOutputStream(new FileOutputStream(dest),   
  80.                         BUFFER_SIZE);   
  81.                 byte[] buffer = new byte[BUFFER_SIZE];   
  82.                 while (in.read(buffer) > 0) {   
  83.                     out.write(buffer);   
  84.                 }   
  85.             } finally {   
  86.                 if (null != in) {   
  87.                     in.close();   
  88.                 }   
  89.                 if (null != out) {   
  90.                     out.close();   
  91.                 }   
  92.             }   
  93.         } catch (Exception e) {   
  94.             // TODO Auto-generated catch block  
  95.             e.printStackTrace();   
  96.         }   
  97.     }   
  98.   
  99.     private static String getExtention(String fileName) {   
  100.         int pos = fileName.lastIndexOf(".");   
  101.         return fileName.substring(pos);   
  102.     }   
  103.   
  104.     @Override  
  105.     public String execute() throws Exception {   
  106.         imageFileName = new Date().getTime() + getExtention(fileName);   
  107.         File imageFile = new File(ServletActionContext.getServletContext()   
  108.                 .getRealPath("/uploadFile") + "/" + imageFileName);   
  109.         System.out.println(imageFile.getName());   
  110.         copyFile(file, imageFile);   
  111.         return super.execute();   
  112.     }   
  113. }  

 struts.xml配置如下:

Xml代码 复制代码 收藏代码
  1. <package name="upload" namespace="/" extends="struts-default">  
  2.             <action name="FileUploadAction" class="jp.co.ricoh.action.upload.FileUploadAction">  
  3.                 <interceptor-ref name="fileUpload">  
  4.                     <param name="allowedTypes">  
  5.                         image/bmp,image/png,image/gif,image/jpeg,image/jpg,   
  6.                            
  7.                     </param>  
  8.                 </interceptor-ref>  
  9.                 <interceptor-ref name="defaultStack"></interceptor-ref>  
  10.                 <result name="input">/upload/upload.jsp</result>  
  11.                 <result name="success">/upload/showUpload.jsp</result>  
  12.             </action>  
  13.         </package>  

 

Upload.jsp

Java代码 复制代码 收藏代码
  1. <%@ page language="java" contentType="text/html; charset=utf-8"  
  2.     pageEncoding="utf-8"%>   
  3. <%@ taglib prefix="s" uri="/struts-tags" %>       
  4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
  5. <html>   
  6. <head>   
  7. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   
  8. <title>Struts2 File Upload</title>   
  9. </head>   
  10. <body>   
  11.     <s:fielderror></s:fielderror>   
  12.     <s:form action="FileUploadAction" method="post" enctype="multipart/form-data">   
  13.         <s:file name="file" label="Image File"></s:file>   
  14.         <s:textfield name="caption" label="Caption"></s:textfield>   
  15.         <s:submit></s:submit>   
  16.     </s:form>   
  17. </body>   
  18. </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>

原创粉丝点击