文件上传——Spring MVC跨服务器

  • 必要前提

    • form表单的enctype取值必须是multipart/form-data。enctype的功能是请求正文的类型

    • method必须是post

    • 需要有<input type="file" />标签

    • 使用commons-fileupload组件实现文件,需要导入该组件相应的支撑jar包

      • commons-fileupload-1.3.1.jar

      • commons-io-2.4.jar

    <!-- 文件上传组件 -->
        <dependency>
          <groupId>commons-fileupload</groupId>
          <artifactId>commons-fileupload</artifactId>
          <version>1.3.1</version>
        </dependency>
        <dependency>
          <groupId>commons-io</groupId>
          <artifactId>commons-io</artifactId>
          <version>2.4</version>
        </dependency>
    <form action="user/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="avatar" />
        <input type="submit" value="上传" />
    </form>

    Spring MVC 跨服务器上传文件

    • 导入sun公司提供的jar包

      <!-- 跨服务器上传文件的jar包 -->
      <dependency>
          <groupId>com.sun.jersey</groupId>
          <artifactId>jersey-client</artifactId>
          <version>1.18.1</version>
      </dependency>
      <dependency>
          <groupId>com.sun.jersey</groupId>
          <artifactId>jersey-core</artifactId>
          <version>1.18.1</version>
      </dependency>

       

    • 搭建一个图片服务器,简单来说就是再创建一个项目,将这个项目的HTTP port和JMX port端口都改一下就可以了

    • 如果出现这样的错误:PUT ***************** returned a response status of 404 Not Found ,说明需要修改tomcat服务器的web.xml主配置文件了(不是项目目录下的web.xml),在配置文件中添加代码即可

      <init-param>
          <param-name>readonly</param-name>
          <param-value>false</param-value>
      </init-param>
    • 如果出现这样的错误:PUT **************** returned a response status of 409 Conflict,说明图片服务器缺少文件目录,这个时候是在项目目录的target下的项目目录下手动创建文件保存的目录即可。

    • 控制器方法的参数名称必须和表单上文件的input标签的name值相同

      import com.sun.jersey.api.client.Client;
      import com.sun.jersey.api.client.WebResource;
      import org.springframework.web.multipart.MultipartFile;
      ​
      import java.util.UUID
      ​
      @Controller
      @ResquestMapping(value="user")
      public class UserController{
          @RequestMapping(value="upload")
          public String upload(MultipartFile avatar) throws Exception{
              //指定图片保存的服务器地址
              String path = "http://127.0.0.1:8081/uploads";
              
              String filename = avatar.getOriginalFilename();
              String uuid = UUID.randomUUID().toString().replace("-", "");
              filename = uuid+"_"+filename;
              
              //创建客户端对象
              Client client = Client.create();
              //连接图片服务器
              WenResource webResource = client.resource(path+filename);
              //上传文件
              webResource.put(avatar.getBytes());
              return "user";
          }
      }

       

    
    
posted @ 2020-04-28 19:20  xsha_h  阅读(383)  评论(0编辑  收藏  举报