Springboot——跨服务器文件上传

一、文件目录

Springboot——跨服务器文件上传_第1张图片
Springboot——跨服务器文件上传_第2张图片

注释:

  1. Servers : Tomcat服务器(只要安装tomcat就会有)
  2. springboot : 服务器1. 服务器端口号改为8090(文件夹虽然爆红,但是不影响)
  3. uploadController : 控制结构
  4. JesyFileUploadUtil : 自定义的jesy工具类
  5. application.properties : 端口号修改
  6. ssm_image_server : 服务器2(因为要实现的效果是跨服务器文件上传,所以自己模拟了一个服务器,需要用tomcat启动,端口号未更改,还是8080.)
  7. upload : 承接上传文件的文件夹。
  8. webapp代码,在我的资源里面,直接粘贴即可。(我的本地在D盘eclip文件夹下wedapp.zip)

二、代码

demo包下的controller包下的uploadController

package demo.controller;

import java.io.IOException;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import demo.utils.JesyFileUploadUtil;

@Controller
public class uploadController {
	
	private final String PIC_URL = "http://127.0.0.1:8080/ssm_image_server";

	@RequestMapping(value = "uploadPic" , method = RequestMethod.POST)
	@ResponseBody
	public String uploadPic(HttpServletRequest request , String fileName){
		//调用跨服务器上传文件的工具类方法上传文件
		
		String result = "";
		try {
			result = JesyFileUploadUtil.uploadFile(request, fileName, PIC_URL);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return result;
	}
}

工具类:util包下的JesyFileUploadUtil

package demo.utils;

import java.io.IOException;
import java.util.Date;
import java.util.Random;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

/**
 * 跨服务器文件上传工具类
 * @author 樊**
 *
 */
public class JesyFileUploadUtil {

	/**
	 * 上传文件
	 * @param request 从request对象中获取上传的文件
	 * @param fileName 文件名
	 * @param servlerUrl 服务器路径 http://127.0.0.1:8080/
	 * @return
	 * @throws IOException 
	 */
	public static String uploadFile(HttpServletRequest request,String fileName,String servlerUrl) throws IOException{
		//把request对象转换成多媒体请求对象
		MultipartHttpServletRequest mh = (MultipartHttpServletRequest)request;
		//根据文件名获取文件对象
		MultipartFile cm = mh.getFile(fileName);
		//获取文件的上传流
		byte[] fbytes = cm.getBytes();
		
		
		//重新设置文件名,避免相同
		String newFileName = "";
		//生成毫秒数,将当前时间生成的毫秒数拼接到文件名上
		newFileName += new Date().getTime()+"";
		//生成三位的随机数
		Random r = new Random();
		for(int i = 0 ; i<3 ; i++){
			//生成一个0到10之间的三位随机整数
			newFileName += r.nextInt(10);
		}
		
		
		//获取上传文件的扩展名
		String orginalFilename = cm.getOriginalFilename();
		String suffix = orginalFilename.substring(orginalFilename.indexOf("."));
	
		
		//创建一个jesy服务器,进行跨服务器上传
		Client client = Client.create();
		//把文件关联到远程服务器
		WebResource resourse = client.resource(servlerUrl+"/upload/"+newFileName+suffix);
		//上传
		resourse.put(String.class,fbytes);
		
		//图片上传成功后要做的事情
		/*
		 * 1.告诉ajax回调函数做图片回显(需要图片完整路径)
		 * 2.将图片的路径保存到数据库(图片的相对路径)
		 * */
		String fullPath = servlerUrl+"/upload/"+newFileName+suffix;
		String relativePath = "/upload/"+newFileName+suffix;//相对路径
		
		//生成一个json响应给客户端
		String resultJson = "{\"fullPath\":\""+fullPath+"\", \"relativePath\":\""+relativePath+"\"}";
		return resultJson;
	}
}

主方法

package demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MainApplication {

	public static void main(String[] args) {
		SpringApplication.run(MainApplication.class, args);

	}

}

端口号更改
在这里插入图片描述

server.port=8090

springboot / pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!-- Begin##01、添加SpringBoot的parent支持##Begin -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.2.RELEASE</version>
	</parent>
	<!-- End##01、添加SpringBoot的parent支持##End -->
	
	
	<groupId>fan</groupId>
	<artifactId>springboot</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
 
	<dependencies>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
		</dependency>
		<!-- 连接池 -->
		<dependency>
			<groupId>com.jolbox</groupId>
			<artifactId>bonecp-spring</artifactId>
			<version>0.8.0.RELEASE</version>
		</dependency>
		<!-- Begin##02、添加SpringBootWeb支持##Begin -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!-- End##02、添加SpringBootWeb支持##End -->
		<!-- Begin##添加JSP支持##Begin -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<scope>provided</scope>
		</dependency>
		<!-- End##添加JSP支持##Begin -->
		<!-- 文件上传 -->
		<dependency>
		   <groupId>commons-fileupload</groupId>
		   <artifactId>commons-fileupload</artifactId>
		   <version>1.3.1</version>
		</dependency>
		<!--跨服务器上传 -->
		<dependency>
		   <groupId>com.sun.jersey</groupId>
		   <artifactId>jersey-client</artifactId>
		   <version>1.19</version>
		</dependency>
		
		<dependency>
		   <groupId>com.sun.jersey</groupId>
		   <artifactId>jersey-core</artifactId>
		   <version>1.19</version>
		</dependency>
	</dependencies>
	<build>
		<finalName>${project.artifactId}</finalName>
		<plugins>
		
			<plugin>
       			 <groupId>org.apache.maven.plugins</groupId>
       			 <artifactId>maven-war-plugin</artifactId>
       			 <version>3.3.1</version>
    	 	 </plugin>
    	  
			<!-- 资源文件拷贝插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-resources-plugin</artifactId>
				<configuration>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- java编译插件 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<encoding>UTF-8</encoding>
				</configuration>
			</plugin>
			<!-- Begin##03、添加SpringBoot的插件支持##Begin -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!-- End##03、添加SpringBoot的插件支持##End -->
		</plugins>
		<pluginManagement>
			<plugins>
				<!-- 配置Tomcat插件 -->
				<plugin>
					<groupId>org.apache.tomcat.maven</groupId>
					<artifactId>tomcat7-maven-plugin</artifactId>
					<version>2.2</version>
				</plugin>
			</plugins>
		</pluginManagement>
	</build>
</project>

ssm_image_server为一个动态的web项目,new——填写文件名——finish即可。ssm_image_server项目中没有代码,只建立了一个名为upload的文件夹。具体路径见项目目录

三、运行

不同于一般的文件运行,因为想在一台服务器上模拟跨服务器文件上传,所以对springboot进行了端口号修改,springboot为8090。ssm_image_server为8080。

运行ssm_image_server
Springboot——跨服务器文件上传_第3张图片
出现如下图字样即运行成功。
Springboot——跨服务器文件上传_第4张图片
springboot采用主程序运行方式

找到你所编写的main方法。我写的主程序为MainApplication,右键——run as —— java application。
Springboot——跨服务器文件上传_第5张图片
出现如下图字样即为运行成功。
Springboot——跨服务器文件上传_第6张图片
目前两个服务器同时运行:
Springboot——跨服务器文件上传_第7张图片
网址输入:http://127.0.0.1:8090/jsps/index.jsp
效果如图所示
Springboot——跨服务器文件上传_第8张图片
点击选择文件即可实现,文件上传。(此程序以图片为例)
Springboot——跨服务器文件上传_第9张图片

你可能感兴趣的:(spring,boot,tomcat,spring,boot,java)