DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Java组件

使用struts2+common-fileupload实现文件上传/下载


struts2为文件上传下载提供了更好的实现机制,这里需要导入文件下载上传的两个jar文件,一个是commons-fileupload-1.2.2.jar,另一个是commons-io-2.0.1.jar;

1、<!--在进行文件上传时,表单提交方式一定要是post的方式,因为文件上传时进制文件可能会很大,还有就是enctype属性,这个属性一定要写multipart/form-data,不然就会以二进制文本上传到服务器端--> 
<form
action="fileUpload.action"method="post"enctype="multipart/form-data">

 username: <input type="text" name="username"><br>

  file: <input type="file" name="file"><br>

        <input type="submit" value="submit">

</form>

2、配置struts

           <action name=" fileUpload"

//cation指向路径

 class="----------------------------- FileUploadAction"

//执行那个方法

method=" fileUpload">

//成功后返回的action

<result type="redirectAction">listAppMessage</result>

//出错后返回的页面

<result name="error" type="redirect">/login.jsp</result>

</action>

3、接下来是FileUploadAction部分代码,因为struts2对上传和下载都提供了很好的实现机制,所以在action这段我们只需要写很少的代码就行

单个文件上传:

public class FileUploadAction extends ActionSupport

{

    private String username;

   

   //注意,file并不是指前端jsp上传过来的文件本身,而是文件上传过来存放在临时文件夹下面的文件(文件名可以随便起,但是要用getFile, setFile作为方法名)

    private File file;

   

    //提交过来的file的名字(可以随便起,但是要用getFileFileName,setFileFileName作为方法名)

    private String fileFileName;

   

    //提交过来的file的MIME类型(浏览器传送过来的文件类型(excel,word等)

    private String fileContentType;

 

    public String getUsername()

    {

        return username;

    }

 

    public void setUsername(String username)

    {

        this.username = username;

    }

 

    public File getFile()

    {

        return file;

    }

 

    public void setFile(File file)

    {

        this.file = file;

    }

 

    public String getFileFileName()

    {

        return fileFileName;

    }

 

    public void setFileFileName(String fileFileName)

    {

        this.fileFileName = fileFileName;

    }

 

    public String getFileContentType()

    {

        return fileContentType;

    }

 

    public void setFileContentType(String fileContentType)

    {

        this.fileContentType = fileContentType;

    }

   

    @Override

    public String execute() throws Exception

    {

        String root = ServletActionContext.getServletContext().getRealPath("/upload");

       

        InputStream is = new FileInputStream(file);

       

        OutputStream os = new FileOutputStream(new File(root, fileFileName));

       

        System.out.println("fileFileName: " + fileFileName);

 

    // 因为file是存放在临时文件夹的文件,我们可以将其文件名和文件路径打印出来,看和之前的fileFileName是否相同

        System.out.println("file: " + file.getName());

        System.out.println("file: " + file.getPath());

       

        byte[] buffer = new byte[500];

        int length = 0;

       

        while(-1 != (length = is.read(buffer, 0, buffer.length)))

        {

            os.write(buffer);

        }

       

        os.close();

        is.close();

       

        return SUCCESS;

    }

}

多文件上传基本和上面一样

Jsp页面定义的

<input type="file" name="file" >

<input type="file" name="file" >

-----------------

Java代码: 测试的时候把action指向的方法名改下(FileUploadAction2),或者再配置个

public class FileUploadAction2 extends ActionSupport

{

    private String username;

   

  //这里用List来存放上传过来的文件,file同样指的是临时文件夹中的临时文件,而不是真正上传过来的文件

    private List<File> file;

   

  //这个List存放的是文件的名字,和List<File>中的文件相对应

    private List<String> fileFileName;

   

    private List<String> fileContentType;

 

    public String getUsername()

    {

        return username;

    }

 

    public void setUsername(String username)

    {

        this.username = username;

    }

 

    public List<File> getFile()

    {

        return file;

    }

 

    public void setFile(List<File> file)

    {

        this.file = file;

    }

 

    public List<String> getFileFileName()

    {

        return fileFileName;

    }

 

    public void setFileFileName(List<String> fileFileName)

    {

        this.fileFileName = fileFileName;

    }

 

    public List<String> getFileContentType()

    {

        return fileContentType;

    }

 

    public void setFileContentType(List<String> fileContentType)

    {

        this.fileContentType = fileContentType;

    }

   

    @Override

    public String execute() throws Exception

    {

        String root = ServletActionContext.getServletContext().getRealPath("/upload");

       

        for(int i = 0; i < file.size(); i++)

        {

            InputStream is = new FileInputStream(file.get(i));

           

            OutputStream os = new FileOutputStream(new File(root, fileFileName.get(i)));

           

            byte[] buffer = new byte[500];

           

            @SuppressWarnings("unused")

            int length = 0;

           

            while(-1 != (length = is.read(buffer, 0, buffer.length)))

            {

                os.write(buffer);

            }

           

            os.close();

            is.close();

        }

       

        return SUCCESS;

    }

}

注意事项:jsp页面<input type="file" name="file" >的name要用file 要不到后台获得不到对应的临时文件(感觉能随便起会更好,不然后面存的时候不知道对应的前台那个控件);

author:LiuHongRan

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号