SpringMVC图片文件跨服务器上传

 更新时间:2019年08月23日 17:12:47   作者:小码农1996  
这篇文章主要为大家详细介绍了SpringMVC图片文件跨服务器上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

图片文件跨服务器上传(我使用的公司云桌面作为上传服务器,自己的笔记本作为存储服务器测试的)

一、上传服务器:

1、pom文件(使用jersey插件)

<!-- 上传组件包 -->
    <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>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>1.9</version>
   </dependency>
 
 <!-- 夸服务器文件上传 -->
 <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-client -->
 <dependency>
   <groupId>com.sun.jersey</groupId>
   <artifactId>jersey-client</artifactId>
   <version>1.18.6</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/com.sun.jersey/jersey-core -->
 <dependency>
   <groupId>com.sun.jersey</groupId>
   <artifactId>jersey-core</artifactId>
   <version>1.18.6</version>
 </dependency>
 <!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-common -->
 <dependency>
   <groupId>org.glassfish.jersey.core</groupId>
   <artifactId>jersey-common</artifactId>
   <version>2.26</version>
 </dependency>

2、前端页面:

<form action="${pageContext.request.contextPath}/Abc/uploadImg.do" enctype="multipart/form-data" method="post">
 多个文件: <input type="file" name="fileList" multiple/>
 <input type="submit" value="提交" />
</form>

3、后台controller:

/**
 * 多文件,跨服务器上传
 * @param request
 * @return
 */
 @ResponseBody
 @RequestMapping("/uploadImg")
 public String fileUpload(MultipartHttpServletRequest request){
 JSONObject joson = new JSONObject();
 String serverAddress = "http://172.xxx.xxx.xxx:8080";//服务器地址
 String folder = "/upload/";//文件夹名称
 String fullPaths = "";//绝对路径
 String reletivePaths = "";//相对路径
 // 创建jesy服务器
 Client client = Client.create();
 // 获取文件名字
 Iterator<String> fileNames = request.getFileNames();
 List<String> fileNameList = new ArrayList<String>();
    List<String> relaPathList = new ArrayList<String>();
    List<String> realPathList = new ArrayList<String>();
 try {
  while (fileNames.hasNext()) {//判断多文件
  // 把fileNames集合中的值打出来
  String fileName = fileNames.next();
  // request.getFiles(fileName)方法即通过fileName这个Key, 得到对应的文件集合列表.
  // 只是在这个Map中, 文件被包装成MultipartFile类型
  List<MultipartFile> fileList = request.getFiles(fileName);
  if (fileList.size() > 0) {
   // 遍历文件列表
   Iterator<MultipartFile> fileIte = fileList.iterator();
   while (fileIte.hasNext()) {
   // 获得每一个文件
   MultipartFile multipartFile = fileIte.next();
   // 截取文件的后缀名(.jpg)
   String originalFilename = multipartFile.getOriginalFilename();//原始文件名
   String subString = originalFilename.substring(originalFilename.indexOf("."));//文件名后缀
   //System.out.println("原始文件名:"+originalFilename+";文件后缀名:"+subString);
   // 将文件对象转换为字节
   byte[] fileBytes = multipartFile.getBytes();
   // 生成唯一的一个字符串名称(带后缀)
   String newFilename = UUID.randomUUID().toString()+subString;
   //System.out.println("唯一文件名(带后缀):"+newFilename);
   // 开始上传文件
   // 拼接保存的路径(相对路径)
   reletivePaths = folder+newFilename;
   // 拼接最终保存的路径(绝对对路径)
   fullPaths = serverAddress+reletivePaths;
   //把文件关联到远程服务器
   WebResource webResource = client.resource(fullPaths);
   // 上传
   webResource.put(String.class, fileBytes);
   fileNameList.add(newFilename);//文件名
           relaPathList.add(reletivePaths);//相对路径
           realPathList.add(fullPaths); //真实完整路径
   }
   joson.put("success", 1);
   joson.put("error", "");
   joson.put("fileNameList", fileNameList);
   joson.put("relaPathList", relaPathList);
   joson.put("realPathList", realPathList);
  } else {
   joson.put("success", 0);
   joson.put("error", "上传失败");
  }
  }
 } catch (UniformInterfaceException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  joson.put("success", 0);
  joson.put("error", "上传失败");
 } catch (ClientHandlerException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  joson.put("success", 0);
  joson.put("error", "上传失败");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  joson.put("success", 0);
  joson.put("error", "上传失败");
 }
 return joson.toString();
 }

二、存储图片文件服务器:

1、Tomcat的conf目录下的web.xml文件的大概100行添加如下几行(这要是不打开就会报错)

 <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>

2、在该Tomcat的/webapps/ROOT目录下创建一个upload目录,用来存放上传的文件

3、启动Tomcat静等着上传服务器那边的请求

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • spring学习教程之@ModelAttribute注解运用详解

    spring学习教程之@ModelAttribute注解运用详解

    这篇文章主要给大家介绍了关于spring学习教程之@ModelAttribute注释运用的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • 详谈Java多线程的几个常用关键字

    详谈Java多线程的几个常用关键字

    下面小编就为大家带来一篇详谈Java多线程的几个常用关键字。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • 使用jmeter实现对jar包的调用方式

    使用jmeter实现对jar包的调用方式

    这篇文章主要介绍了使用jmeter实现对jar包的调用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • 深度理解SpringMVC中的HandlerMapping

    深度理解SpringMVC中的HandlerMapping

    这篇文章主要介绍了深度理解SpringMVC中的HandlerMapping,HandlerMapping的作用根据request找到对应的处理器Handler,在HandlerMapping接口中有一个唯一的方法getHanler,需要的朋友可以参考下
    2023-09-09
  • java中的Reference类型用法说明

    java中的Reference类型用法说明

    这篇文章主要介绍了java中的Reference类型用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 深入理解JVM之Java对象的创建、内存布局、访问定位详解

    深入理解JVM之Java对象的创建、内存布局、访问定位详解

    这篇文章主要介绍了深入理解JVM之Java对象的创建、内存布局、访问定位,结合实例形式详细分析了Java对象的创建、内存布局、访问定位相关概念、原理、操作技巧与注意事项,需要的朋友可以参考下
    2019-09-09
  • Java结构型设计模式之享元模式示例详解

    Java结构型设计模式之享元模式示例详解

    享元模式(FlyWeight Pattern),也叫蝇量模式,运用共享技术,有效的支持大量细粒度的对象,享元模式就是池技术的重要实现方式。本文将通过示例详细讲解享元模式,感兴趣的可以了解一下
    2022-09-09
  • 基于java math API 的详细解释说明

    基于java math API 的详细解释说明

    本篇文章是对java math API进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • mybatis批量新增、删除、查询和修改方式

    mybatis批量新增、删除、查询和修改方式

    这篇文章主要介绍了mybatis批量新增、删除、查询和修改方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • java system类使用方法示例 获取系统信息

    java system类使用方法示例 获取系统信息

    这篇文章主要介绍了java system类使用方法,该类中的方法都是静态的。不能被实例化,没有对外提供构造函数,该类可以获取系统信息
    2014-01-01

最新评论