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

版权声明:学习 https://blog.csdn.net/qq_40238006/article/details/83860006

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

一、上传服务器:

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

如果有什么疑问的可以联系我(QQ37091905),能解决的我可以给你们说一下

猜你喜欢

转载自blog.csdn.net/qq_40238006/article/details/83860006
今日推荐