java文件传输接口

java文件传输接口跨系统的文件传输 上传 接口在系统开发中经常遇见在不同的系统 如安卓和 web 端 的文件上传 有两种方法 第一种 如果图片比较小可以采用 post 方式将图片转成 base64 的码放在 data 域中 以字符串传参的方式发送到指定的接口取出其值 多个就采用数组 这种一般试用与仅仅图片上传 且图片比较小大约 10kbz 左右太大了 base64 位比较都 http 传输数据太大 导致不能进入指定接口 第二种 采用

跨系统的文件传输(上传)接口

public String upLoadFilePost(String actionUrl, Map 
  
    files) throws IOException { String BOUNDARY = java.util.UUID.randomUUID().toString(); String PREFIX = "--", LINEND = "\r\n"; String MULTIPART_FROM_DATA = "multipart/form-data"; String CHARSET = "UTF-8"; URL uri = new URL(actionUrl); HttpURLConnection conn = (HttpURLConnection) uri.openConnection(); conn.setReadTimeout(5 * 1000); conn.setDoInput(true);// 允许输入 conn.setDoOutput(true);// 允许输出 conn.setUseCaches(false); conn.setRequestMethod("POST"); // Post方式 conn.setRequestProperty("connection", "keep-alive"); conn.setRequestProperty("Charsert", "UTF-8"); conn.setRequestProperty("Content-Type", MULTIPART_FROM_DATA + ";boundary=" + BOUNDARY); DataOutputStream outStream = new DataOutputStream( conn.getOutputStream()); // 发送文件数据 if (files != null) for (Map.Entry 
   
     file : files.entrySet()) { StringBuilder sb1 = new StringBuilder(); sb1.append(PREFIX); sb1.append(BOUNDARY); sb1.append(LINEND); sb1.append("Content-Disposition: form-data; name=\"file\"; filename=\"" + file.getKey() + "\"" + LINEND); sb1.append("Content-Type: application/octet-stream; charset=" + CHARSET + LINEND); sb1.append(LINEND); outStream.write(sb1.toString().getBytes()); InputStream is = new FileInputStream(file.getValue()); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { outStream.write(buffer, 0, len); } is.close(); outStream.write(LINEND.getBytes()); } // 请求结束标志 byte[] end_data = (PREFIX + BOUNDARY + PREFIX + LINEND).getBytes(); outStream.write(end_data); outStream.flush(); // 得到响应码 int res = conn.getResponseCode(); if (res == 200) { InputStream in = conn.getInputStream(); InputStreamReader isReader = new InputStreamReader(in); BufferedReader bufReader = new BufferedReader(isReader); String line = ""; String data = ""; while ((line = bufReader.readLine()) != null) { data += line; } outStream.close(); conn.disconnect(); return data; } outStream.close(); conn.disconnect(); return null; } 
    
  

调用客户端方法

 public static void main (String[] args){ String actionUrl = "http://shuilangyizu.iask.in/liuf/utilController/fileInteraction.do"; Map 
  
    files = new HashMap 
   
     (); File file = new File(request.getSession().getServletContext().getRealPath("/") + "upload/temp/1.doc"); files.put("x."+file.getName(), file); File file2 = new File(request.getSession().getServletContext().getRealPath("/") + "upload/temp/1.jpg"); files.put("y."+file2.getName(), file2); String result = utilService.upLoadFilePost(actionUrl, files); } 
    
  

服务端代码

public String fileInteraction(HttpServletRequest request, HttpServletResponse response) throws Exception { //操作成功则返回OK String result = ""; MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; //解析request,将结果放置在list中 Map 
  
    > fileMap = multiRequest.getMultiFileMap(); for (String key : fileMap.keySet()) { List 
   
     files = fileMap.get(key); for (MultipartFile file : files) { if (!file.isEmpty()) { String fileNamePath = file.getOriginalFilename(); String[] params = fileNamePath.split("\\."); String filename = ""; int i = 0; for (String str : params) { i = i + 1; if (StringUtils.isNotEmpty(filename)) { if (i==params.length) { filename = filename + "." + str; }else{ filename = filename + "/" + str; } }else{ filename = str; } } // 文件保存路径 String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/wxfile/" + filename; File iFile = new File(filePath); File iFileParent = iFile.getParentFile(); if(!iFileParent.exists()){ iFileParent.mkdirs(); } // 转存文件 file.transferTo(new File(filePath)); result = "ok"; } } } return result; } 
    
  

注意:写服务器端时可能会报错

RequestFacade cannot be cast to org.springframework.web.multipart.MultipartHttpServletRequest 

修改方法将

MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; 

修改成

MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext()); MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request); 

感谢大佬的博客!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209720.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:34
下一篇 2026年3月19日 上午8:34


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号