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静等着上传服务器那边的请求

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

(0)

相关推荐

  • springmvc实现跨服务器文件上传功能

    本文实例为大家分享了springmvc实现跨服务器文件上传功能的具体代码,供大家参考,具体内容如下 1.创建一个新的maven工程并且部署tomcat,用于做图片服务器并且在webapp下创建uploads文件 2.在应用服务器上的pom.xml导入坐标 <!--跨服务器上传文件--> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-core</artifa

  • springMVC+jersey实现跨服务器文件上传

    本文实例为大家分享了springMVC+jersey实现跨服务器文件上传的具体代码,供大家参考,具体内容如下 1.首先添加所需要的jar包 2.在springMVC的配置文件中添加文件上传解析器 <!-- 文件上传的解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> &l

  • SpringMVC图片文件跨服务器上传

    图片文件跨服务器上传(我使用的公司云桌面作为上传服务器,自己的笔记本作为存储服务器测试的) 一.上传服务器: 1.pom文件(使用jersey插件) <!-- 上传组件包 --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version&g

  • .NET实现文件跨服务器上传下载的方法

    环境说明 两台服务器服务器为A,服务器为B,服务器B为文件服务器 实现方法 1.在A和B上创建用户docshareuser,用户名和密码保持一致 2.B服务器上设置附件文件夹Attachments共享,添加用户docshareuser并设置读写权限 3.在A上运行框输入"\\IP\Attachments",输入用户名密码测试是否共享成功,共享不成功请检查网络及配置问题 4.修改AWeb.config文件附件路径节点的值 <add key="键值" value=

  • SpringMVC跨服务器上传文件中出现405错误的解决

    目录 SpringMVC跨服务器上传文件中出现405错误 重点来了~ SpringMVC跨服务器上传文件中出现405错误 下面是 应用服务器 的代码 package com.itheima.controller; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; import org.apache.commons.fileupload.FileItem; import or

  • SpringBoot 如何优雅的实现跨服务器上传文件的示例

    项目完整代码链接:代码链接 跨服务上传文件示意图 一.创建项目 springboot:2.2.6 JDK:1.8 由于资源有限,就用不同端口表示不同服务器了. 1.1 上传文件的项目 首先idea快速搭建工具创建一个springboot项目,名字为fileupload,作为上传文件的服务端. 选择spring web模块即可 配置相关参数 spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=30

  • Android Retrofit实现多图片/文件、图文上传功能

    什么是 Retrofit ? Retrofit是Square开发的一个Android和Java的REST客户端库.这个库非常简单并且具有很多特性,相比其他的网络库,更容易让初学者快速掌握.它可以处理GET.POST.PUT.DELETE-等请求,还可以使用picasso加载图片. 一.再次膜拜下Retrofit Retrofit无论从性能还是使用方便性上都很屌!!!,本文不去介绍其运作原理(虽然很想搞明白),后面会出专题文章解析Retrofit的内部原理:本文只是从使用上解析Retrofit实现

  • Java实现跨服务器上传文件功能

    前几天做个项目,本身客户端和管理员端是写在一起的,共用一台服务器,客户上传的文件都是存在服务器的硬盘上的.老龙提出要把客户端和管理员端分离,这时候用户上传的附件的存储就出现问题了.显然,把大到几百M的apk文件存到数据库不现实,查了半天,在两端建立ftp服务器传文件是最快的方法. 具体流程是,用户登录外网客户端,上传文件到外网的服务器硬盘上,在此同时,文件通过外网服务器访问内网管理员服务器的ftp服务器,传到内网服务器的硬盘上.这样内网服务器可以对上传的文件进行加密签名工作,之后也通过ftp的方

  • Android :okhttp+Springmvc文件解析器实现android向服务器上传照片

    A.前言:为了解决安卓端向服务器上传照片的问题 1.获得相册权限,选取照片,取到照片的url 2.使用okhttp访问服务器并向服务器传照片 3.配置springmvc文件解析器 4.搭建服务器,获取数据保存照片 B.Android添加一个按钮和一个ImageView,设置它的点击事件,打开相册选择照片,解析得到照片的本机url,并把照片显示到ImageView里 添加权限: <uses-permission android:name="android.permission.INTERNE

  • form+iframe解决跨域上传文件的方法

    (1)  jsp代码: <form id="form" name="form" enctype="multipart/form-data" method="post" target="hidden_frame"> <table style="border:0;width:100%;text-align:middle;"> <tr style="bo

  • C#实现图片上传(PC端和APP)保存及 跨域上传说明

    A-PC端: 1-页面--multiple是控制单张还是多张图片上传 <input id="BusRoute" type="file" class="btn btn-default btn-lg" style="height:34px;padding-top:5px;padding-bottom:5px;" multiple /> 2-后台获取图片文件: HttpFileCollection pcFileColl

随机推荐