论坛首页 Java企业应用论坛

Struts2 上传文件allowedTypes详解

浏览 12726 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-03-14  

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>

 

   发表时间:2012-03-18  
所以在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>

这里的配置为什么有些是重复的?
0 请登录后投票
   发表时间:2012-03-18  
不知道中文文件名怎么解决,
还有就是文件名有重复的问题~
0 请登录后投票
   发表时间:2012-03-19  
w156445045 写道
不知道中文文件名怎么解决,
还有就是文件名有重复的问题~

设置编码
0 请登录后投票
   发表时间:2012-03-19  
哦,这个是我图方便,直接贴过来的,没有剪辑。
0 请登录后投票
   发表时间:2012-03-19  
中文的问题,现在基本不会出现问题了吧。
或者加个拦截器也行。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics