博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts2中的文件上传下载
阅读量:6704 次
发布时间:2019-06-25

本文共 3297 字,大约阅读时间需要 10 分钟。

文件的上传下载

1文件上传下载基本原理:
在一个Web
工程中,要实现文件的上传,首先要把表单上传数据的编码方式设置为二进制数据格式,这要用到表单的enctype
属性,此属性一般有三个值。
1.1     application/x-www-form-urlencoded
:这是默认值,适用范围最广泛。但在向服务器发送大量的文本、包含非ASCII
字符的文本或二进制数据时,这种编码方式效率很低。
1.2     multipart/form-data
:上传二进制数据,只有使用了multipart/form-data
才能完整上传数据,完成上传功能。
1.3     text/plain
:主要用于电子邮件的应用。
一般实际应用中多设置enctype
属性值为multipart/form-data
,这样在服务器中得到的上传数据才能以二进制传递。然后设置一个输入流,得到页面上传来的文件信息,再用一个输出流将这个文件写入服务器的内存中。部分代码改自三扬科技,开发者突击:Struts2
核心技术与JavaEE
框架整合开发实战一书。
2.应用详解:
FileAction.java
实现功能的代码段:
// 
用列表封装上传文件的三个属性
,
若只上传一个文件的情况,可以不用列表。
    
private
 List<File> 
upload
;
 
    
private
 List<String> 
uploadContentType
;
 
    
private
 List<String> 
uploadFileName
;
 
// savePath,fileName
为数据库中的对应项
private
 String 
savePath
;
private
 String 
fileName
;
private
 File 
file
;
public
 String addSave() 
throws
 Exception {
System.
out
.println(
"-------fileaddsave"
);
 
// 
将页面上传的文件封装成一个列表
       List<File> files = getUpload();
       
// 
设置上传文件存放的相对路径
       setSavePath(
""
);
       String path = 
"D:/project/file/"
;
       
// 
保存上传文件路径
 
       File f = 
new
 File(path);
 
       
// 
判断文件夹是否存在,不存在,则创建一个新文件夹
       
try
 {
           
if
 (!f.isDirectory()) {
              f.mkdir();
           }
           
// 
遍历删除所有该文件夹下的文件
           File[] flist = f.listFiles();
           
for
 (
int
 i = 0; i < flist.
length
; i++) {
              flist[i].delete();
           }
       
catch
 (Exception ex) {
           ex.printStackTrace();
       }
 
       
// 
用一个
for
循环把
files
中的所有文件取出来逐一上传
 
       
if
 (files != 
null
) {
           
for
 (
int
 i = 0; i < files.size(); i++) {
              
// 
以上传文件存放路径和原文件名建立一个输出流
path+ System.currentTimeMillis()+
              
// fileName.substring(fileName.lastIndexOf("."),fileName.length())
              String filename = getUploadFileName().get(i);
              System.
out
.println(filename);
              FileOutputStream fos;
              getRequest().getSession().setAttribute(
"fileName"
, filename);
              
// if explore is ie
              
if
 (filename.indexOf(
"/"
) == -1) {
                  fos = 
new
 FileOutputStream(path + filename);
 
              
else
 {
// if explore is firefox
                  String fileNAME = filename.substring(filename
                         .lastIndexOf(
"/"
), filename.length());
                  fos = 
new
 FileOutputStream(path + fileNAME);
 
              }
              System.
out
.println(getUploadFileName().get(i));
              
// 
以上传文件建立一个输入流
              FileInputStream fis = 
new
 FileInputStream((File) files.get(i));
              
// 
将上传文件写入到输出流所对应的文件中
              
byte
[] buffer = 
new
 
byte
[1024];
              
int
 len = 0;
              
while
 ((len = fis.read(buffer)) > 0) {
                  fos.write(buffer, 0, len);
              }
              fos.close();
           }
 
       }
       String fileName = (String) getRequest().getSession().getAttribute(
              
"fileName"
);
       
file
.setSavePath(path);
       
file
.setFileName(fileName);
       
fileDAO
.attachDirty(
file
);
return
 
SUCCESS
;
    }
 
 
    
public
 String download() 
throws
 Exception {
 
       Integer id = (Integer) getRequest().getSession().getAttribute(
"id"
);
       
file
 = (File) 
fileDAO
.findByProperty(
"id"
, id)
              .get(0);
       String path = 
file
.getSavePath();
       String name = 
file
.getFileName();
       File f = 
new
 File(path);
       
if
 (f.exists()) {
           
try
 {
              getResponse().setContentType(
"application/octec-stream"
);
              getResponse().setHeader(
                     
"Content-Disposition"
,
                     
"attachment;filename="
                            
new
 String(name.getBytes(), 
"ISO-8859-1"
));
              OutputStream outputStream = getResponse().getOutputStream();
              InputStream inputStream = 
new
 FileInputStream(path);
              
byte
[] buffer = 
new
 
byte
[1024];
              
int
 i = -1;
              
while
 ((i = inputStream.read(buffer)) != -1) {
                  outputStream.write(buffer, 0, i);
              }
              outputStream.flush();
              outputStream.close();
              inputStream.close();
              outputStream = 
null
;
           
catch
 (Exception e) {
              e.printStackTrace();
           }
       }
       
return
 
null
;
    }
     本文转自 gaochaojs 51CTO博客,原文链接:http://blog.51cto.com/jncumter/163457,如需转载请自行联系原作者
你可能感兴趣的文章
ibm rational software architect download
查看>>
Web前端资源汇总
查看>>
python 相关安装和配置
查看>>
jquery的closest方法和parents方法的区别
查看>>
RHEL每天定时备份Oracle
查看>>
SQLPROMPT5.3对各种加密对象的解密测试
查看>>
QR二维码生成器源码(中间可插入小图片)
查看>>
jQuery回溯
查看>>
jquery easy ui 1.3.4 表单(7)
查看>>
Git 提交大文件提示 fatal: The remote end hung up unexpectedly
查看>>
排列组合
查看>>
2013-2014
查看>>
tftp + bras
查看>>
页面正在载入中
查看>>
二十进制数的加法
查看>>
测试使用Word发布博客
查看>>
国产系统
查看>>
EF Code First 初体验
查看>>
鼠标移至div内部其他层时,触发mouseout
查看>>
SQL 优化原则
查看>>