日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java文件传输接口

發布時間:2023/12/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java文件传输接口 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

跨系統的文件傳輸(上傳)接口

在系統開發中經常遇見在不同的系統(如安卓和web端)的文件上傳,有兩種方法。
第一種:如果圖片比較小可以采用post方式將圖片轉成base64的碼放在data域中,以字符串傳參的方式發送到指定的接口取出其值(多個就采用數組)。這種一般試用與僅僅圖片上傳,且圖片比較小大約10kbz左右太大了base64位比較都,http傳輸數據太大,導致不能進入指定接口。
第二種:采用流傳輸的方式傳接口,這種可以批量傳輸且,大小無限制,支持多種類型文件上傳。下面主要講第二種。
客服端代碼

public String upLoadFilePost(String actionUrl, Map<String, File> 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<String, File> 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<String, File> files = new HashMap<String, File>();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 {//操作成功則返回OKString result = "";MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request; //解析request,將結果放置在list中Map<String, List<MultipartFile>> fileMap = multiRequest.getMultiFileMap();for (String key : fileMap.keySet()) {List<MultipartFile> 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);

感謝大佬的博客!

總結

以上是生活随笔為你收集整理的java文件传输接口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。