java文件传输接口,HttpURLConnection

167 阅读1分钟

java文件传输接口,HttpURLConnection将数据以文件流的形式传送给接口

public JSONObject transferFile(String urlStr, String filePath, String fileName) {

    HttpURLConnection conn = null;
    //boundary是request请求头和上传文件内容的分割符
    String boundary  = java.util.UUID.randomUUID().toString();
    String prefix = "##";
    String lineEnd = "\r\n";
    
    OutputStream out = null;
    InputStream is = null;
    InputStream inStream = null;
    InputStreamReader isReader = null;
    BufferedReader bReader = null;

    try {
        //connection 配置连接参数,并写出
        URL url = new URL(urlStr);
        conn = (HttpURLConnection)url.openConnection();
        conn.setConnectTimeout(5000);
        conn.setReadTimeout(30000);
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setUseCaches(false);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("connection", "keep-alive");
        conn.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);
        conn.setRequestProperty("x-client-token", "");
        
        out = new DataOutputStream(conn.getOutputStream());
        StringBuilder sb = new StringBuilder();
        sb.append(prefix);
        sb.append(boundary);
        sb.append(lineEnd);
        sb.append("Content-Disposition:form-data;name=\"file\";filename=\"" + fileName + "\"" + lineEnd);
        sb.append("Content-Type:application/octet-stream; charset=utf-8" + lineEnd);
        sb.append(lineEnd);
       
        out.write(sb.toString().getBytes());
        //写出文件内容的二进制信息
        is = new FileInputStream(filePath);
        byte[] bt = new byte[1024];
        int len = 0;
        while ((len = is.read(bt)) != -1) {
            out.write(bt, 0, len);
        }
        out.write(lineEnd.getBytes());
        byte[] endData = (prefix + boundary + prefix + lineEnd).getBytes();
        out.write(endData);
        out.flush();
        //返回响应code,并读入接口返回信息
        int resCode = conn.getResponseCode();
        inStream = conn.getInputStream();
        isReader = new InputStreamReader(inStream);
        bReader = new BufferedReader(isReader);
        String line = "";
        StringBuilder sb2 = new StringBuilder();

        while ((line = bReader.readLine()) != null) {
            sb2.append(line);
        }

        JSONObject result = JSONObject.parseObject(sb2.toString());
        conn.disconnect();
        return result;

    } catch(Exception e) {
        e.printStackTrace();
        return null;
    } finally {
        if (bReader != null) {
            try{
                bReader.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

        if (isReader != null) {
            try{
                isReader.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }

        if (inStream != null) {
            try{
                inStream.close();
            }catch(Exception e){
                e.printStackTrace();
            }
        }
        
        if (is != null) {
            try{
                is.close();
            }catch(Exception e){            
                e.printStackTrace();
            }
        }

        if (out != null) {
            try{
                out.close();
            } catch (Exception e){
                e.printStackTrace();
            }
        }

        if (conn != null) {
            conn.disconnect();
        }
    }
}