SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置

一.文件上传

1.导入依赖


    commons-fileupload
    commons-fileupload
    1.3.3

2.配置文件上传解析器

在spring-mvc.xml文件中添加文件上传解析器。


    
    
    
    
    
    

CommonsMultipartResolverMultipartResolver接口的实现类。

MultipartResolver是用于处理文件上传,当收到请求时DispatcherServletcheckMultipart()方法会调用MultipartResolverisMultipart()方法判断请求中是否包含文件,如果请求数据中包含文件,则调用MultipartResolverresolverMultipart()方法对请求的数据进行解析,然后将文件数据解析MultipartFile并封装在MultipartHTTPServletRequest(继承了HTTPServletRequest)对象中,最后传递给Controller

3.配置服务器存放文件地址

3.1. 

SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置_第1张图片

3.2 将项目部署到服务器上

SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置_第2张图片 3.3 配置相应路径

SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置_第3张图片

3.4 选择我们control层的方法中定义的路径

SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置_第4张图片 

 3.5 最后保存好即可

4.导入PropertiesUtil工具类

1.通过PropertiesUtil工具类加载配置页目录文件

package com.YU.utils;

import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class PropertiesUtil {
	public static String getValue(String key) throws IOException {
		Properties p = new Properties();
		InputStream in = PropertiesUtil.class.getResourceAsStream("/resource.properties");
		p.load(in);
		return p.getProperty(key);
	}
	
}

2.同时在代码中我们可以发现,通过工具类读取resource.properties文件,在配置文件resource.properties中,我们将一些服务器存放文件地址定义在该文件中,方便我们后期修改配置文件

3.resource.properties文件

dir = D:/deposit/upload/
server = /upload/

5.编写Controller层

 通过Controller层利用MultipartFile类接收前端传递的文件到后台,以流的方式上传到服务器中,

并将数据库中数据的字段(图片路径)进行修改

//文件上传
    @RequestMapping("/upload")
    public String upload(HBook hBook,MultipartFile bfile){
        try {
        String dir = PropertiesUtil.getValue("dir");
        String server = PropertiesUtil.getValue("server");
        String filename = bfile.getOriginalFilename();
        FileUtils.copyInputStreamToFile(bfile.getInputStream(), new File(dir + filename));
        hBook.setImg(server+filename);

        hBookbiz.updateByPrimaryKeySelective(hBook);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "redirect:list";
    }

6.编写前端页面

编写前端页面表单,通过post请求的方式将图片上传到服务器,并将数据进行修改

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    图片上传




注意:表单的提交方式为enctype="multipart/form-data" ,它是一个HTML表单属性,用于指定将表单数据编码为多部分(multipart)的格式,以便支持文件上传,文件上传需要额外的服务器端处理逻辑,包括文件存储、验证、处理等。在服务器端代码中,需要根据我们的需求来处理上传的文件

7.测试结果

SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置_第5张图片

我们在将数据传输到服务器时,可以通过查看服务器部署的地址查看我们传输的文件

 SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置_第6张图片

 二.文件下载

我们通过controller层调用请求方法,获取到服务器本地请求地址,并将网络请求地址替换成本地,截取当前名称进行+1作为下载名称,再获取请求头信息,以二进制流的形式进行转换,并通过ResponseEntity将文件内容以字节数组的形式作为响应主体返回给客户端

1.在controller层加入以下代码 

@RequestMapping(value="/download")
    public ResponseEntity download(HBook hBook, HttpServletRequest req){

        try {
            //先根据文件id查询对应图片信息
            HBook clz = this.hBookbiz.selectByPrimaryKey(hBook.getBid());
            String diskPath = PropertiesUtil.getValue("dir");
            String reqPath = PropertiesUtil.getValue("server");
            String realPath = clz.getImg().replace(reqPath,diskPath);
            String fileName = realPath.substring(realPath.lastIndexOf("/")+1);
            //下载关键代码
            File file=new File(realPath);
            HttpHeaders headers = new HttpHeaders();//http头信息
            String downloadFileName = new String(fileName.getBytes("UTF-8"),"iso-8859-1");//设置编码
            headers.setContentDispositionFormData("attachment", downloadFileName);
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            //MediaType:互联网媒介类型  contentType:具体请求中的媒体类型信息
            return new ResponseEntity(FileUtils.readFileToByteArray(file),headers, HttpStatus.OK);
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }

2.测试结果

SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置_第7张图片

三.多文件上传

多文件上传和普通文件上传的区别在于form表单提交的参数不同和controller层的上传形式不同

 1.controller层

获取上传文件的原始文件名:String filename = cfile.getOriginalFilename();

根据配置文件中指定的服务器目录保存上传文件:FileUtils.copyInputStreamToFile(cfile.getInputStream(),new File(dir+filename)); 这里使用了 FileUtils 工具类将文件内容复制到指定的服务器目录中。

将文件名追加到 sb 对象中:sb.append(filename).append(",");

最后,将 sb.toString() 输出到控制台。

如果有任何异常发生,将打印异常栈轨迹。

最后,方法返回 "redirect:list",将客户端重定向到名为 list 的页面。

@RequestMapping("/uploads")
    public String uploads(HttpServletRequest req, HBook hBook, MultipartFile[] files){
        try {
            StringBuffer sb = new StringBuffer();
            for (MultipartFile cfile : files) {
                //思路:
                //1) 将上传图片保存到服务器中的指定位置
                String dir = PropertiesUtil.getValue("dir");
                String server = PropertiesUtil.getValue("server");
                String filename = cfile.getOriginalFilename();
                FileUtils.copyInputStreamToFile(cfile.getInputStream(),new File(dir+filename));
                sb.append(filename).append(",");
            }
            System.out.println(sb.toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
        return "redirect:list";
    }

2.前端页面

   

3.测试结果

 

本期文件下载到这里就结束了,感谢各位大大的观看,三连是博主更新的动力,感谢谢谢谢谢!!!!

SpringMVC文件上传、文件下载多文件上传及jrebel的使用与配置_第8张图片

你可能感兴趣的:(java,服务器,前端,spring,mvc,后端)