java文件傳輸接口


開發的時候碰到這樣的需求:需要在一個系統(客戶端發送請求)中將文件傳輸至另外一個系統(服務端接收)中去的實現方式,可以批量傳輸文件,代碼如下:

客戶端請求:

    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 String fileInteraction(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //操作成功則返回OK
        String 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;
    }

調用客戶端調用發送請求方法:

     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);

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM