Springmvc文件上传/下载

Springmvc文件上传:

CommonsMultipartResolver类

<form >表当中enctype=“”application/x-www-form-urlencoded” 该默认的属性是按照字符流读取的。文件上传需要使用字节流读取

怎我们需要更改一下enctype属性的类型。更改值,将enctype=”multipart/form-data” 这样就是照字节流读取了。

1.           导入jar:apache下的fileupload.jar ,io.jar

2.           创建jsp页面

       <form action="upload" method="post" enctype="multipart/form-data">

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

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

       </form>

3.           配置controller,注意:MultipartFile 的接口对象名 必须跟<inputtype="file" name="file"/>属性名一致!

       @RequestMapping("upload")

       public String upload(MultipartFile file) throws IllegalStateException, IOException{

              // 取得到文件名

              System.out.println(file.getOriginalFilename());

              // 文件的类型 可以加以对上传的文件类型进行限制!

              System.out.println(file.getContentType()); //image/jpeg

             

              String filename = file.getOriginalFilename();

              //     要知道文件保存的路径

              file.transferTo(new File("F:/"+filename));

              return "up";

       }

4.           配置MultipartFile的实现类 ,在springmvc的核心配置文件 ,配置该实现类的时候Id必须是multipartResolver

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

         <!-- 设置字符集 -->

         <property name="defaultEncoding" value="utf-8"></property>

         <!-- 限制文件上传的大小  单位byte-->

         <property name="maxUploadSize" value="102400"></property>

         <!-- 设置内存大小 单位byte -->

         <property name="maxInMemorySize" value="15000"></property>

</bean>

5.           测试:

6.           上传文件的时候,可能遇到的问题!解决方案:参考4

1)           可能会出现中文乱码!

2)        会出现文件大小限制!


7.  配置错误页面信息在web.xml

<error-page>

    <error-code>500</error-code>

    <location>/error.jsp</location>

  </error-page>


Springm文件下载

Springmvc没有对文件下载提供特殊的方式,这里的文件下载跟我们的servlet的文件下载是一样的!

文件下载:有的浏览会自动带下载功能! 当点击下载的时候,如果能在浏览器上显示,则显示。如果下载的资源在浏览器上不能显示,则默认就是下载!

 

设置头部信息:response.setHeader("Content-Disposition","attachment; filename=\""       +fileName + "\"");

*用文件下载的时候,可以选用缓冲流的。好处:可以提高程序性能!

Jsp页面

    <form action="download" method="post" enctype="multipart/form-data">

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

    </form>

Controller

@RequestMapping("download")

    public void download(HttpServletRequest request,HttpServletResponse response) throws Exception{

       //1.要知道下载的文件

       File file = new File("F:/gaoyy.jpg");

       //2.使用io流中的FileInputStream来读取文件

       FileInputStream is = new FileInputStream(file);

       //3.创建一个ServletOutputStream对象,使用response.getOutputStream();

       ServletOutputStream os = response.getOutputStream();

      

       //4.给下载文件起个别名,为什么?使用时间

       String fileName = new SimpleDateFormat("yyyy-MM-dd").format(new Date())+".jpg";

       //5.设置下载响应头信息文件下载的响应头

       response.setHeader("Content-Disposition", "attachment; filename=\""  + fileName + "\"");

       //6.通过io流的方式进行循环读取进行下载!

       //  创建一个字节数组吧  字符串的长度.length(), 数组.length, 集合size(), 文件长度.length()

       byte [] length = new byte[(int) file.length()];

       int len = 0;

       //  将字节数组放到is中。

       while ((len = is.read(length))!=-1) {

           os.write(length, 0, len);

       }

       os.flush();

       os.close();

       is.close();

    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值