Struts2中的文件上传下载

简介:

文件的上传下载

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,如需转载请自行联系原作者



相关文章
|
6月前
|
前端开发 Java Apache
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
103 0
JAVAEE框架技术之6-springMVC拦截器和文件上传功能
|
存储 前端开发 JavaScript
SpringMVC之文件上传下载
SpringMVC之文件上传下载
145 0
|
前端开发 Java Spring
SpringMvc--文件上传下载
SpringMvc--文件上传下载
49 0
|
Java
struts2实现的文件上传下载案例(一)、FileUpLoad
struts2实现的文件上传下载案例(一)、FileUpLoad
249 0
struts2实现的文件上传下载案例(一)、FileUpLoad
|
前端开发 数据库
struts2实现的文件上传下载案例(二)、FileUpLoad文件的下载
struts2实现的文件上传下载案例(二)、FileUpLoad文件的下载
109 0
|
Java 缓存
09 Struts2 实现文件上传下载
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hxdeng/article/details/81710554 文件上传对Struts2来说是一件非常容易的事情。
1138 0
|
JSON Java 网络安全
SSH框架之SpringMVC文件上传功能代码
版权声明:本文为博主原创文章,如需转载,请标明出处。 https://blog.csdn.net/alan_liuyue/article/details/79327717 简介  ...
1038 0