springmvc 实现文件上传

传统的文件上传

  传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上。并且上传完成之后,浏览器可能跳转。

  1. SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同。

<dependency>
  <groupId>commons-fileuploadgroupId>
  <artifactId>commons-fileuploadartifactId>
  <version>1.3.1version>
dependency>
<dependency>
  <groupId>commons-iogroupId>
  <artifactId>commons-ioartifactId>
  <version>2.4version>
dependency>
/**
* SpringMVC方式的文件上传
*
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value="/fileupload")
public String fileupload(HttpServletRequest request,MultipartFile upload) throws Exception {
  System.out.println("SpringMVC方式的文件上传...");
  // 先获取到要上传的文件目录
  String path = request.getSession().getServletContext().getRealPath("/uploads");
  // 创建File对象,一会向该路径下上传文件
  File file = new File(path);
  // 判断路径是否存在,如果不存在,创建该路径
  if(!file.exists()) {
    file.mkdirs();
  }
  // 获取到上传文件的名称
  String filename = upload.getOriginalFilename();
  String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
  // 把文件的名称唯一化
  filename = uuid+"_"+filename;
  // 上传文件
  upload.transferTo(new File(file,filename));
  return "success";
}

<bean id="multipartResolver" 
  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  
  <property name="maxUploadSize">
    <value>5242880value>
  property>
bean>

跨服务器方式文件上传:

  1. 搭建图片服务器,简单测试的话可以在同一台电脑再运行一个不同端口的Tomcat服务器

  2.额外导入跨服务器所需的jar包

<dependency>
  <groupId>com.sun.jerseygroupId>
  <artifactId>jersey-coreartifactId>
  <version>1.18.1version>
dependency>
<dependency>
  <groupId>com.sun.jerseygroupId>
  <artifactId>jersey-clientartifactId>
  <version>1.18.1version>
dependency>

  3. 编写文件上传的页面

  4. 编写控制器

/**
* SpringMVC跨服务器方式的文件上传
*
* @param request
* @return
* @throws Exception
*/
@RequestMapping(value="/fileupload")
public String fileupload(MultipartFile upload) throws Exception {
  System.out.println("SpringMVC跨服务器方式的文件上传...");
  // 定义图片服务器的请求路径  图片服务器中uploads文件夹必须存在,否则报错
  String path = "http://localhost:9090/image/uploads/";
  // 获取到上传文件的名称
  String filename = upload.getOriginalFilename();
  String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
  // 把文件的名称唯一化
  filename = uuid+"_"+filename;
  // 向图片服务器上传文件
  // 创建客户端对象
  Client client = Client.create();
  // 连接图片服务器
  WebResource webResource = client.resource(path + filename);
  // 上传文件
  webResource.put(upload.getBytes());
  return "success";
}

  5.配置文件上传解析器

你可能感兴趣的:(springmvc 实现文件上传)