您的位置:首页 > 编程语言 > Java开发

Springmvc文件上传/下载

2017-09-13 11:08 357 查看

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"<
4000
/em>
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();
    }

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: