书单推荐:成为Java顶级程序员架构师 ,这20来本(高薪)必看点击获取
图片文件跨服务器上传(我使用的公司云桌面作为上传服务器,自己的笔记本作为存储服务器测试的)
一、上传服务器:
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静等着上传服务器那边的请求
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持谷谷点程序。
转载请注明:谷谷点程序 » SpringMVC图片文件跨服务器上传