SpringMVC 本地文件上传+跨服务器文件上传

一、 本地文件上传

先导入两个jar包依赖坐标

  <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>

 1. 文件上传的jsp页面  注意form标签中的 entype属性需设置为multipart/form-data

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/user/fileupload" method="post" enctype="multipart/form-data">
    <INPUT TYPE="file" name="upload"/>
<br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

2. controller控制页面

这里用到了MultipartFile 对象 主要是用来文件上传

package com.qst.Controller;


import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.UUID;
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/fileupload")
  public String fileupload(HttpServletRequest request , MultipartFile upload) throws Exception {

        System.out.println("上传。。。");

        String path = request.getSession().getServletContext().getRealPath("uploads");

        //判断该路径是否存在
        File file = new File(path);
        if(!file.exists()){
            //如果不存在则创建一个目录
            file.mkdirs();
        }

        //获取上传文件的名称
        String filename = upload.getOriginalFilename();
        //把文件名设置成一个唯一值
        String uid = UUID.randomUUID().toString().replace("-","");
  
        filename = uid + "_" + filename;
      

        //完成文件上传 , 将文件存放到 path 指定目录下 并 把名字设置为 filename 指定的名字
        upload.transferTo(new File(path,filename));
        return "success";
  }
}

3. 配置文件解析器

这里bean的id必须为multipartResolver  ,bean里还可以添加一些参数 如设置上传文件的大小的最大值

<!--配置文件解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--        配置上传文件的大小-->
        <property name="maxUploadSize" value="10000000"/>
    </bean>

二、跨服务器文件上传

先导jar包

    <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-client</artifactId>
      <version>1.19</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
    <dependency>
      <groupId>com.sun.jersey</groupId>
      <artifactId>jersey-core</artifactId>
      <version>1.19</version>
    </dependency>

  </dependencies>

创建连个服务器一个用于接收文件,一个用于上传文件。设置不同端口号

在接收文件的服务器项目中 需要开启一个支持写操作

在web.xml中加入

 <servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    <init-param>
      <param-name>debug</param-name>
      <param-value>0</param-value>
    </init-param>
    <init-param>
      <param-name>readonly</param-name>
      <param-value>false</param-value>
    </init-param>
    <init-param>
      <param-name>listings</param-name>
      <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
        </servlet-mapping>

 

1. jsp页面也普通上传文件一样

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/user/fileuploadServer" method="post" enctype="multipart/form-data">
    <INPUT TYPE="file" name="upload"/>
<br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

controller 

package com.qst.Controller;


import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.util.UUID;
@Controller
@RequestMapping("/user")
public class UserController {


    @RequestMapping("/fileuploadServer")
    public String fileuploadServer(MultipartFile upload) throws Exception {

        //设置上传服务器的路径 要保证有loads这个目录
        String path = "http://localhost:8089/loads";

        //获取上传文件的名称
        String filename = upload.getOriginalFilename();
        //把文件名设置成一个唯一值
        String uid = UUID.randomUUID().toString().replace("-","");

        filename = uid + "_" + filename;
//创建客户端对象
        Client client = Client.create();
//与服务器进行连接
        WebResource webResource = client.resource(path + filename);
//进行文件上传,并将文件转换成字节流
        webResource.put(upload.getBytes());


        return "success";
    }
}

进行上传时需先开启接收文件的也服务器

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值