class="com.dingxun.upload.FileUploadAction"method="upload">
image/bmp,image/png,image/gif,image/jpeg,image/jpg
image/x-png,image/pjpeg
1048576
/upload
/resultUpload.jsp
---->
备注1:
在action中添加/upload主要用来设定保存上传文件的路径,相对路径和绝对路径都可
备注2:
上面那个拦截器可要可不要,因为限制上传文件大小和类型在拦截器里配置不能起作用,要用常量配置如下面的限制文件大小的
上面的常量覆盖了default.properties里的设置
2:
FileUploadAction代码如下:
viewplaincopytoclipboardprint?
01.importjava.io.BufferedInputStream;
02.importjava.io.BufferedOutputStream;
03.importjava.io.File;
04.importjava.io.FileInputStream;
05.importjava.io.FileNotFoundException;
06.importjava.io.FileOutputStream;
07.importjava.io.IOException;
08.importjava.io.InputStream;
09.importjava.io.OutputStream;
10.
11.importmons.io.FileUtils;
12.importorg.apache.struts2.ServletActionContext;
13.
14.
15.publicclassFileUploadAction{
16.
17.privatefinalstaticintBUFFER_SIZE=16*1024;
18.privateFileupload;
19.privateStringuploadFileName;
20.privateStringuploadContentType;
21.privateStringtitle;
22.privateStringSavePath;
23.privateStringss;
24.
25.
26.publicStringgetSavePath(){
27.returnSavePath;
28.}
29.
30.publicvoidsetSavePath(StringsavePath){
31.SavePath=savePath;
32.}
33.
34.publicStringgetTitle(){
35.returntitle;
36.}
37.
38.publicvoidsetTitle(Stringtitle){
39.this.title=title;
40.}
41.
42.publicFilegetUpload(){
43.returnupload;
44.}
45.
46.publicvoidsetUpload(Fileupload){
47.this.upload=upload;
48.}
49.
50.publicStringgetUploadContentType(){
51.returnuploadContentType;
52.}
53.
54.publicvoidsetUploadContentType(StringuploadContentType){
55.this.uploadContentType=uploadContentType;
56.}
57.
58.publicStringgetUploadFileName(){
59.returnuploadFileName;
60.}
61.
62.publicvoidsetUploadFileName(StringuploadFileName){
63.this.uploadFileName=uploadFileName;
64.}
65.
66.
67.
68./*
69.*copy这个方法主要是用来实现文件上传的,实现的原理就是分别打开输入输出流,进行文件拷贝的
70.*/
71.privatevoidcopy(Filesrc,Filedist){
72.InputStreamin=null;
73.BufferedOutputStreamout=null;
74.
75.try{
76.in=newBufferedInputStream(newFileInputStream(src),BUFFER_SIZE);
77.out=newBufferedOutputStream(newFileOutputStream(dist),BUFFER_SIZE);
78.byte[]buffer=newbyte[BUFFER_SIZE];
79.intlen=0;
80.try{
81.while((len=in.read(buffer))>0){
82.out.write(buffer,0,len);
83.}
84.}catch(IOExceptione){
85.e.printStackTrace();
86.}
87.}catch(FileNotFoundExceptione){
88.e.printStackTrace();
89.}finally{
90.if(null!
=in){
91.try{
92.in.close();
93.}catch(IOExceptione){
94.e.printStackTrace();
95.}
96.}
97.if(null!
=out){
98.try{
99.out.close();
100.}catch(IOExceptione){
101.e.printStackTrace();
102.}
103.}
104.}
105.}
106.
107.
108.publicStringupload(){
109.StringdistPath=ServletActionContext.getServletContext().getRealPath(getSavePath())+"\\"+getUploadFileName();
110.System.out.println(distPath);
111.FiledisFile=newFile(distPath);
112.System.out.println("文件类型:
"+getUploadContentType());
113.//try{
114.//FileUtils.copyFile(upload,disFile);
115.//}catch(IOExceptione){
116.//e.printStackTrace();
117.//}
118.copy(upload,disFile);
119.return"success";
120.}
121.
122.}
importjava.io.BufferedInputStream;
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.OutputStream;
importmons.io.FileUtils;
importorg.apache.struts2.ServletActionContext;
publicclassFileUploadAction{
privatefinalstaticintBUFFER_SIZE=16*1024;
privateFileupload;
privateStringuploadFileName;
privateStringuploadContentType;
privateStringtitle;
privateStringSavePath;
privateStringss;
publicStringgetSavePath(){
returnSavePath;
}
publicvoidsetSavePath(StringsavePath){
SavePath=savePath;
}
publicStringgetTitle(){
returntitle;
}
publicvoidsetTitle(Stringtitle){
this.title=title;
}
publicFilegetUpload(){
returnupload;
}
publicvoidsetUpload(Fileupload){
this.upload=upload;
}
publicStringgetUploadContentType(){
returnuploadContentType;
}
publicvoidsetUploadContentType(StringuploadContentType){
this.uploadContentType=uploadContentType;
}
publicStringgetUploadFileName(){
returnuploadFileName;
}
publicvoidsetUploadFileName(StringuploadFileName){
this.uploadFileName=uploadFileName;
}
/*
*copy这个方法主要是用来实现文件上传的,实现的原理就是分别打开输入输出流,进行文件拷贝的
*/
privatevoidcopy(Filesrc,Filedist){
InputStreamin=null;
BufferedOutputStreamout=null;
try{
in=newBufferedInputStream(newFileInputStream(src),BUFFER_SIZE);
out=newBufferedOutputStream(newFileOutputStream(dist),BUFFER_SIZE);
byte[]buffer=newbyte[BUFFER_SIZE];
intlen=0;
try{
while((len=in.read(buffer))>0){
out.write(buffer,0,len);
}
}catch(IOExceptione){
e.printStackTrace();
}
}catch(FileNotFoundExceptione){
e.printStackTrace();
}finally{
if(null!
=in){
try{
in.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
if(null!
=out){
try{
out.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
publicStringupload(){
StringdistPath=ServletActionContext.getServletContext().getRealPath(getSavePath())+"\\"+getUploadFileName();
System.out.println(distPath);
FiledisFile=newFile(distPath);
System.out.println("文件类型:
"+getUploadContentType());
//try{
//FileUtils.copyFile(upload,disFile);
//}catch(IOExceptione){
//e.printStackTrace();
//}
copy(upload,disFile);
return"success";
}
}
备注:
1:
ServletActionContextcontext=ServletActionContext.getServletContext();
2:
ServletActionContext.getServletContext().getRealPath(getSavePath())得到上传文件目的文件夹的实际路径
3:
ServletActionContext.getServletContext().getRealPath(getSavePath())+"\\"+getUploadFileName()一个文件的实际路径,这个主要是用来建立输出流
如FiledisFile=newFile(distPath)
OutputStreamout=newBufferedOutputStream(newFileOutputStream(dist),BUFFER_SIZE);
4:
上传文件可以自己用io流拷贝文件,还可以用FileUtils.copyFile(file1,file2);
5:
File的名字要和上传页面File域name属性的值一致如:
upload则FileUploadAction中的File的名字也应为upload(privateFileupload),除此之外还要添加以下两个属性:
privateStringuploadFileName对应于上传文件的名字
privateStringuploadContentType对应于上传文件的类型
以上两个属性的名字的命名必需以File的属性名开头,然后再加上FileName或ContentType如uploadFileName和uploadContentType
3:
jsp页面如下:
viewplaincopytoclipboardprint?
01.<%@pagelanguage="java"contentType="text/html;charset=utf-8"
02.pageEncoding="utf-8"%>
03.
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
04.
05.