欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

SpringMVC图片文件跨服务器上传

程序员文章站 2024-01-20 21:50:28
图片文件跨服务器上传(我使用的公司云桌面作为上传服务器,自己的笔记本作为存储服务器测试的) 一、上传服务器: 1、pom文件(使用jersey插件) <...

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

一、上传服务器:

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

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