SpringMVC上传与下载

 

springMVC中的上传操作

       上传需要另外导入以下两个jar包,可以在struts2里找到。

         1.commons-fileupload-1.3.1.jar

2.commons-io-2.2.jar

 

在springMVC的xml中的代码

      

<!-- 上传文件配置 -->

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

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

      </bean>

 

Upload.java

@Controller

public class FileuploadController {

    @RequestMapping("/upload")

    public ModelAndView upload(HttpServletRequest req,@RequestParam("file") CommonsMultipartFile file) throws IOException {

       ModelAndView mv =new ModelAndView();

       //获取上传的目录

       String path=req.getRealPath("/Files");

       //获得文件的输入流

       InputStream is=file.getInputStream();

       //输出流写入文件到上传目录

       OutputStream os=new FileOutputStream(new File(path,file.getOriginalFilename()));

       //上传过程

       int len=0;

       byte[] buffer=new byte[400];

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

           os.write(buffer, 0, len);

       }

       //关闭资源

       os.close();

       is.close();

       mv.setViewName("hello");

       return mv;

    }

}

批量上传与struts2中的写法一样,把file改为数组就可以了。在上传方法中@RequestParam("file")是必须要有的否则会报错。

 

Jsp 页面

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

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

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

      </form>

 

SpringMVC中的下载操作

 

下载操作与servlet里面的下载一样,这里只写controller里的代码

 

Download.java

@Controller

public class DownloadController {

  

   @RequestMapping("/download")

   public void download(HttpServletRequest req,HttpServletResponse resp,String fileName) throws IOException {

      //获取文件所在路径

      String path=req.getServletContext().getRealPath("/Files");

      //设置文件名的编码格式,解决下载的中文文件名称乱码

      String downloadFileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");

      //输入流读取文件

      File file=new File(path,fileName);

      InputStream is=new FileInputStream(file);

      //将文件写入客户端硬盘

      OutputStream os=resp.getOutputStream();

     

      resp.setCharacterEncoding("UTF-8");

      resp.setHeader("Content-Disposition", "attachment;filename="+downloadFileName);

      //org.apache.commons.io包下的IOUtils,注意不要写错

      IOUtils.copy(is, os);

      //关闭输入输出流

      os.close();

      is.close();

   }

}

 

这种写法实测可以解决下载不了中文文件名称的文件,并且不会出现乱码等问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC是一个基于Java的开源框架,用于构建Web应用程序。它提供了一种模型-视图-控制器(MVC)的架构模式,用于将应用程序的不同部分分离开来,以实现更好的可维护性和可扩展性。 下面是一个简单的Spring MVC上传下载的实例: 1. 配置文件: 首先,在Spring MVC的配置文件中添加以下配置: ```xml <!-- 配置文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760"/> <!-- 设置最大上传文件大小为10MB --> </bean> ``` 2. 控制器类: 创建一个控制器类,用于处理上传下载请求。以下是一个示例: ```java @Controller public class FileController { @RequestMapping(value = "/upload", method = RequestMethod.POST) public String uploadFile(@RequestParam("file") MultipartFile file) { // 处理文件上传逻辑 if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); // 保存文件到服务器或者其他操作 return "redirect:/success"; // 上传成功后跳转到成功页面 } catch (IOException e) { e.printStackTrace(); } } return "redirect:/error"; // 上传失败后跳转到错误页面 } @RequestMapping(value = "/download", method = RequestMethod.GET) public ResponseEntity<Resource> downloadFile() { // 处理文件下载逻辑 // 构建文件资源对象 Resource fileResource = new FileSystemResource("path/to/file"); // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=file.txt"); // 返回文件资源和响应头 return ResponseEntity.ok() .headers(headers) .contentLength(fileResource.contentLength()) .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(fileResource); } } ``` 3. 前端页面: 在前端页面中添加上传下载的表单和按钮。以下是一个简单的示例: ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="上传" /> </form> <a href="/download">下载文件</a> ``` 这是一个简单的Spring MVC上传下载的实例。你可以根据实际需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值