ssm中的文件上传和下载

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/Stars_min/article/details/98596776

                                        文件的上传和下载(maven项目)

前提需要导入依赖

<dependency>
	<groupId>commons-fileupload</groupId>
	<artifactId>commons-fileupload</artifactId>
	<version>1.3.2</version>
</dependency>

然后在springmvc.xml文件中进行相关配置(具体属性自行百度----其实我也不知道,嘿嘿)

<!--添加multipartResolver的bean支持文件上传 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver" p:maxUploadSize="802400" p:defaultEncoding="utf-8"/> 

一、文件的上传

在controller中实现上传的步骤:

  1. 获取文件名:String fname = pic.getOriginalFilename();
  2. 对文件名进行处理(数据库中存入的文件名是随机文件名):
  3. 生成随机名的步骤:
    a.获取文件的后缀名
    String ext = FilenameUtils.getExtension(fname);
    b.生成随机文件名
    String randomName = UUID.randomUUID()+"."+ext;
  4.   指定上传文件的物理路径(imgs为生成的文件夹):String zPath = req.getServletContext().getRealPath("imgs");
  5. 构建file对象,实现上传
  6. 对路径进行拼接:
    File file = new File(zPath+'/'+randomName);
    FileUtils.copyInputStreamToFile(pic.getInputStream(), file);
    String savePath = zPath+'/'+randomName;
    stu.setPicPath(savePath);

文件上传注意的事项:

  1. 在含有文件上传的表单form标签中加入enctype="multipart/form-data"。
  2. 在文件上传的input标签中的type属性的file,而且name自己定义,之后的后台也就是controller需要用到。 
  3. 在controller中必须由MultipartFile pic这个属性,pic对应name属性

二、文件的下载

指定要下载的文件:<a href="download.do?fileName=logo.jpg">点击下载</a>

在controller中实现文件下载的步骤:

  1. 获得文件:String fName = req.getServletContext().getRealPath("/imgs/"+fileName);
  2. 通过文件构建一个输入流:FileInputStream fis = new FileInputStream(fName);
  3. 在构建一个缓存区:byte[] by = new byte[fis.available()];其中的fis.available()表示创建一个刚刚好的缓存区,不大不小,刚刚好
  4. 这个可有可无==预防中文文件名:中文操作系统默认采用GBK,浏览器默认解释的字符编码格式为ISO-8859-1
            fileName = new String(fileName.getBytes("GBK"),"ISO-8859-1");
  5. 设置相应头文件及相关内容:
resq.setHeader("content-disposition", "attachment;filename="+fileName);
resq.setContentType("application/octet-stream");
resq.setContentLength(fis.available());

最后进行读写以及关闭操作

扫描二维码关注公众号,回复: 7201074 查看本文章
读写
fis.read(by);//读
resq.getOutputStream().write(by);//写
resq.getOutputStream().flush();//刷新
resq.getOutputStream().close();//关闭
fis.close();

至此基于ssm的文件上传和下载已经全部搞定

猜你喜欢

转载自blog.csdn.net/Stars_min/article/details/98596776