heting
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
40 随笔 :: 9 文章 :: 45 评论 :: 0 Trackbacks
<
2010年6月
>
日
一
二
三
四
五
六
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(3)
给我留言
查看公开留言
查看私人留言
随笔分类
c#范例(4)
(rss)
java范例
(rss)
js(3)
(rss)
linux(1)
(rss)
WebSphere(1)
(rss)
数据库(3)
(rss)
随笔档案
2010年10月 (1)
2010年8月 (5)
2010年3月 (2)
2009年11月 (2)
2009年9月 (1)
2009年8月 (1)
2009年7月 (2)
2009年5月 (1)
2009年4月 (3)
2009年3月 (4)
2009年2月 (1)
2009年1月 (3)
2008年12月 (2)
2008年11月 (7)
2008年10月 (4)
2008年9月 (1)
文章档案
2008年9月 (9)
搜索
最新评论
1. re: struts2+freemarker中防止表单的重复提交token
@51互联云-济南程序猿
你什么都不懂,瞎说
--人
2. re: struts2+freemarker中防止表单的重复提交token
没关系,大家好,什么都没有
--人
3. re: struts2+freemarker中防止表单的重复提交token
套头
--人
4. re: struts2+freemarker中防止表单的重复提交token
评论内容较长,点击标题查看
--51互联云-济南程序猿
5. re: struts1文件上传和下载
评论内容较长,点击标题查看
--zuidaima
阅读排行榜
1. struts1文件上传和下载(21124)
2. javax.naming.CommunicationException 的一个相关异常(已解决)(11541)
3. 自己写的一个c#winform打印类(8479)
4. C# 与 C++ 数据类型比较及结构体转换 (7202)
5. WebSphere7.0 上部署struts2 找不到用于处理 JSP 的扩展处理器(2968)
评论排行榜
1. struts1文件上传和下载(23)
2. 自己写的一个c#winform打印类(8)
3. struts2+freemarker中防止表单的重复提交token(6)
4. Ireport在浏览器中的显示代码(2)
5. EJ3.0将EJB程序和WEb程序发布到weblogic10.3是出现的错误weblogic.wsee.async.AsyncResponseBean(2)
struts1文件上传和下载
FileAction
package
com.action;
import
org.apache.struts.action.
*
;
import
javax.servlet.http.
*
;
import
com.actionForm.FileActionForm;
import
org.apache.struts.actions.DispatchAction;
import
java.util.Date;
import
java.text.
*
;
import
org.apache.struts.upload.FormFile;
import
java.io.
*
;
import
java.net.URLEncoder;
import
com.dao.
*
;
public
class
FileAction
extends
DispatchAction
{
private
JDBConnection connection
=
new
JDBConnection();
//
以下方法实现文件的上传
public
ActionForward upLoadFile(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws
Exception
{
ActionForward forward
=
null
;
Date date
=
new
Date();
FileActionForm fileActionForm
=
(FileActionForm) form;
//
FormFile用于指定存取文件的类型
FormFile file
=
fileActionForm.getFile();
//
获取当前的文件
//
获得系统的绝对路径 String dir = servlet.getServletContext().getRealPath("/image");
//
我上传的文件没有放在服务器上。而是存在D:D:\\loadfile\\temp\\
String dir
=
"
D:\\loadfile\\temp\\
"
;
int
i
=
0
;
String type
=
file.getFileName();
while
(i
!=-
1
)
{
//
找到上传文件的类型的位置,这个地方的是'.'
i
=
type.indexOf(
"
.
"
);
/**/
/*
System.out.println(i);
*/
/**/
/*
截取上传文件的后缀名,此时得到了文件的类型
*/
type
=
type.substring(i
+
1
);
}
//
限制上传类型为jpg,txt,rar;
if
(
!
type.equals(
"
jpg
"
)
&&
!
type.equals(
"
txt
"
)
&&
!
type.equals(
"
bmp
"
))
{
//
当上传的类型不为上述类型时,跳转到错误页面。
forward
=
mapping.findForward(
"
error
"
);
}
else
{
//
将上传时间加入文件名(这个地方的是毫秒数)
String times
=
String.valueOf(date.getTime());
//
组合成 time.type
String fname
=
times
+
"
.
"
+
type;
//
InInputStream是用以从特定的资源读取字节的方法。
InputStream streamIn
=
file.getInputStream();
//
创建读取用户上传文件的对象
//
得到是字节数,即byte,我们可以直接用file.getFileSize(),也可以在创建读取对象时用streamIn.available();
//
int ok=streamIn.available();
int
ok
=
file.getFileSize();
String strFee
=
null
;
//
这个地方是处理上传的为M单位计算时,下一个是以kb,在下一个是byte;
if
(ok
>=
1024
*
1024
)
{
float
ok1
=
(((
float
)ok)
/
1024f
/
1024f);
DecimalFormat myformat1
=
new
DecimalFormat(
"
0.00
"
);
strFee
=
myformat1.format(ok1)
+
"
M
"
;
System.out.println(strFee
+
"
M
"
);
}
else
if
(ok
>
1024
&&
ok
<=
1024
*
1024
)
{
double
ok2
=
((
double
)ok)
/
1024
;
DecimalFormat myformat2
=
new
DecimalFormat(
"
0.00
"
);
strFee
=
myformat2.format(ok2)
+
"
kb
"
;
System.out.println(strFee
+
"
kb
"
);
}
else
if
(ok
<
1024
)
{
System.out.println(
"
aaaaaaaaa
"
);
strFee
=
String.valueOf(ok)
+
"
byte
"
;
System.out.println(strFee);
}
System.out.println( streamIn.available()
+
"
文件大小byte
"
);
//
这个是io包下的上传文件类
File uploadFile
=
new
File(dir);
//
指定上传文件的位置
if
(
!
uploadFile.exists()
||
uploadFile
==
null
)
{
//
判断指定路径dir是否存在,不存在则创建路径
uploadFile.mkdirs();
}
//
上传的路径+文件名
String path
=
uploadFile.getPath()
+
"
\\
"
+
fname;
//
OutputStream用于向某个目标写入字节的抽象类,这个地方写入目标是path,通过输出流FileOutputStream去写
OutputStream streamOut
=
new
FileOutputStream(path);
int
bytesRead
=
0
;
byte
[] buffer
=
new
byte
[
8192
];
//
将数据读入byte数组的一部分,其中读入字节数的最大值是8192,读入的字节将存储到,buffer[0]到buffer[0+8190-1]的部分中
//
streamIn.read方法返回的是实际读取字节数目.如果读到末尾则返回-1.如果bytesRead返回为0则表示没有读取任何字节。
while
((bytesRead
=
streamIn.read(buffer,
0
,
8192
))
!=
-
1
)
{
//
写入buffer数组的一部分,从buf[0]开始写入并写入bytesRead个字节,这个write方法将发生阻塞直至字节写入完成。
streamOut.write(buffer,
0
, bytesRead);
}
//
关闭输出输入流,销毁File流。
streamOut.close();
streamIn.close();
file.destroy();
String paths
=
path;
System.out.println(paths);
String fileName
=
Chinese.toChinese(fileActionForm.getFileName());
//
获取文件的名称
//
String fileSize = String.valueOf(file.getFileSize());
String fileDate
=
DateFormat.getDateInstance().format(date);
String sql
=
"
insert into tb_file values('
"
+
fileName
+
"
','
"
+
strFee
+
"
','
"
+
fileDate
+
"
','
"
+
paths
+
"
')
"
;
connection.executeUpdate(sql);
connection.closeConnection();
forward
=
mapping.findForward(
"
upLoadFileResult
"
);
}
return
forward;
}
//
实现文件的下载
public
ActionForward downFile(ActionMapping mapping, ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws
Exception
{
String path
=
request.getParameter(
"
path
"
);
System.out.println(path
+
"
111
"
);
BufferedInputStream bis
=
null
;
BufferedOutputStream bos
=
null
;
OutputStream fos
=
null
;
InputStream fis
=
null
;
//
如果是从服务器上取就用这个获得系统的绝对路径方法。 String filepath = servlet.getServletContext().getRealPath("/" + path);
String filepath
=
path;
System.out.println(
"
文件路径
"
+
filepath);
File uploadFile
=
new
File(filepath);
fis
=
new
FileInputStream(uploadFile);
bis
=
new
BufferedInputStream(fis);
fos
=
response.getOutputStream();
bos
=
new
BufferedOutputStream(fos);
//
这个就就是弹出下载对话框的关键代码
response.setHeader(
"
Content-disposition
"
,
"
attachment;filename=
"
+
URLEncoder.encode(path,
"
utf-8
"
));
int
bytesRead
=
0
;
//
这个地方的同上传的一样。我就不多说了,都是用输入流进行先读,然后用输出流去写,唯一不同的是我用的是缓冲输入输出流
byte
[] buffer
=
new
byte
[
8192
];
while
((bytesRead
=
bis.read(buffer,
0
,
8192
))
!=
-
1
)
{
bos.write(buffer,
0
, bytesRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
return
null
;
}
}
FileActionForm
package
com.actionForm;
import
org.apache.struts.action.
*
;
import
org.apache.struts.upload.
*
;
public
class
FileActionForm
extends
ActionForm
{
private
String fileName;
//
上传文件的名称
private
String fileSize;
//
上传文件的大小
private
String filePath;
//
上传文件到服务器的路径
private
String fileDate;
//
上传文件的日期
private
FormFile file;
//
上传文件
public
String getFileName()
{
return
fileName;
}
public
FormFile getFile()
{
return
file;
}
public
String getFileSize()
{
return
fileSize;
}
public
String getFilePath()
{
return
filePath;
}
public
String getFileDate()
{
return
fileDate;
}
public
void
setFileName(String fileName)
{
this
.fileName
=
fileName;
}
public
void
setFile(FormFile file)
{
this
.file
=
file;
}
public
void
setFileSize(String fileSize)
{
this
.fileSize
=
fileSize;
}
public
void
setFilePath(String filePath)
{
this
.filePath
=
filePath;
}
public
void
setFileDate(String fileDate)
{
this
.fileDate
=
fileDate;
}
}
index.jsp
<
table
width
="264"
height
="81"
border
="0"
align
="center"
cellpadding
="0"
cellspacing
="0"
>
<
tr
>
<
td
width
="115"
rowspan
="4"
align
="center"
><
img
src
="<%=form.getFilePath()%>"
width
="100"
height
="100"
></
td
>
<
td
width
="133"
align
="center"
>
图片名称:
<%
=
form.getFileName()
%>
</
td
>
</
tr
>
<
tr
align
="center"
>
<
td
>
图片大小:
<%
=
form.getFileSize()
%>
</
td
>
</
tr
>
<
tr
align
="center"
>
<
td
>
上传日期:
<%
=
form.getFileDate()
%>
</
td
>
</
tr
>
<
tr
>
<
td
align
="center"
><
a
href
="fileAction.do?method=downFile&path=<%=form.getFilePath()%>"
><
img
src
="priture/bottond.jpg"
></
a
>
</
td
>
</
tr
>
</
table
>
<
html:form
action
="fileAction.do?method=upLoadFile"
enctype
="multipart/form-data"
onsubmit
="return Mycheck()"
>
<
table
height
="52"
border
="0"
align
="center"
cellpadding
="0"
cellspacing
="0"
>
<
tr
align
="center"
>
<
td
width
="60"
height
="26"
>
图片名称:
</
td
>
<
td
width
="160"
>
<
html:text
property
="fileName"
/>
</
td
>
<
td
width
="60"
>
图片路径:
</
td
>
<
td
width
="198"
>
<
html:file
property
="file"
/>
</
td
>
</
tr
>
<
tr
align
="right"
>
<
td
height
="26"
colspan
="4"
>
<
html:submit
>
上传
</
html:submit
>
</
td
>
</
tr
>
</
table
>
</
html:form
>
struts-config.xml
<?
xml version="1.0" encoding="UTF-8"
?>
<!
DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"
>
<
struts-config
>
<
form-beans
>
<
form-bean
name
="fileActionForm"
type
="com.actionForm.FileActionForm"
/>
</
form-beans
>
<
action-mappings
>
<
action
name
="fileActionForm"
parameter
="method"
path
="/fileAction"
scope
="request"
type
="com.action.FileAction"
validate
="true"
>
<
forward
name
="upLoadFileResult"
path
="/result.jsp"
/>
<
forward
name
="error"
path
="/fail.jsp"
></
forward
>
</
action
>
</
action-mappings
>
<
message-resources
parameter
="ApplicationResources"
/>
</
struts-config
>
posted on 2009-03-04 10:36
贺挺
阅读(21124)
评论(23)
编辑
收藏
评论
#
re: struts1文件上传和下载[未登录]
2010-04-08 09:28
qq
very perfit!!!
回复
更多评论
#
re: struts1文件上传和下载
2010-06-30 17:03
ai
能给个源码例子吗
回复
更多评论
#
re: struts1文件上传和下载
2010-10-31 11:15
路过
顶楼主!
回复
更多评论
#
re: struts1文件上传和下载
2011-06-29 14:51
naoskang
顶楼主,非常好用
回复
更多评论
#
re: struts1文件上传和下载[未登录]
2011-09-13 09:06
even
思路一下就清晰了
回复
更多评论
#
re: struts1文件上传和下载
2011-12-19 20:33
asd
上传文件时??要求客户去填写???文件名????
回复
更多评论
#
re: struts1文件上传和下载
2011-12-19 20:34
asd
如果不那样写的话。会乱码OKlahoma???
回复
更多评论
#
re: struts1文件上传和下载[未登录]
2012-01-06 16:58
chen
非常感谢,转了、、、、、、
回复
更多评论
#
re: struts1文件上传和下载
2012-03-06 11:10
安万军
JDBConnection这个类是那个包的?
回复
更多评论
#
re: struts1文件上传和下载
2012-03-06 11:27
安万军
@安万军
看错了!
回复
更多评论
#
re: struts1文件上传和下载
2012-06-30 21:41
lsc
@安万军
我没看懂这个JDBConnection,有问题,能指点一下吗
回复
更多评论
#
re: struts1文件上传和下载
2012-06-30 22:35
lsc
@安万军
是数据库连接吗?自己写个类行不行?
回复
更多评论
#
re: struts1文件上传和下载
2012-07-31 09:33
sinianxue
这里让用户填写名称和路径不合理,一般用户是不会同意这么做的
回复
更多评论
#
re: struts1文件上传和下载[未登录]
2012-09-05 19:41
test
这种方法上传1m以上的doc文件会出现错误
回复
更多评论
#
re: struts1文件上传和下载[未登录]
2012-11-30 22:35
aaa
不能直接用
回复
更多评论
#
re: struts1文件上传和下载
2012-12-13 15:25
lvjun
垃圾
回复
更多评论
#
re: struts1文件上传和下载
2013-03-21 11:48
000
000
回复
更多评论
#
re: struts1文件上传和下载
2013-06-17 20:50
yangther
asdasd
回复
更多评论
#
re: struts1文件上传和下载
2013-06-17 20:50
yangther
Struts上传
回复
更多评论
#
re: struts1文件上传和下载[未登录]
2013-06-28 15:02
jBoy
下载的是时候,没有考虑过中文乱码的问题。
回复
更多评论
#
re: struts1文件上传和下载
2013-12-12 14:48
是
顶!!!!!!!!!!!!!!!!!!
回复
更多评论
#
re: struts1文件上传和下载[未登录]
2014-01-22 17:38
ggg
ssgsg
回复
更多评论
#
re: struts1文件上传和下载
2015-03-24 18:12
zuidaima
java struts框架demo使用实例教程源代码下载地址:
http://zuidaima.com/share/kstruts-p1-s1.htm
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
Powered by:
BlogJava
Copyright © 贺挺