Struts2 上传文件allowedTypes详解

时间:2022-04-06 07:39:25

原文地址:http://www.iteye.com/topic/1121677

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

UploadFileAction

Java代码  Struts2 上传文件allowedTypes详解
  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代码  Struts2 上传文件allowedTypes详解
  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代码  Struts2 上传文件allowedTypes详解
  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/bmp,image/png,image/gif,image/jpeg,image/jpg,
      image/pjpeg ,image/bmp, image/gif, image/x-png,
</param>