美文网首页程序员
Java模拟post请求上传文件

Java模拟post请求上传文件

作者: Ktry | 来源:发表于2020-02-27 13:06 被阅读0次

Java模拟post请求上传文件

  • Java代码实现

    /**
         * 模拟文件post上传
         * @param urlStr(接口地址)
         * @param formName(接口file接收名)
         * @param fileName(需要上传文件的本地路径)
         * @return文件上传到接口返回的结果
         */
    public static String uploadFile(String urlStr, String  formName, String fileName) {
        String baseResult = null;
        try {
            final String newLine = "\r\n";
            final String boundaryPrefix = "--";
            String BOUNDARY = "========7d4a6d158c9";// 模拟数据分隔线
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");// 设置为POST请求
            conn.setDoOutput(true);
            conn.setDoInput(true);
    
            conn.setRequestProperty("connection", "Keep-Alive");// 设置请求头参数
            conn.setRequestProperty("Charsert", "UTF-8");
            conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY);
            OutputStream out = conn.getOutputStream();
            
            File file = new File(fileName);
            StringBuilder sb = new StringBuilder();
            sb.append(boundaryPrefix);
            sb.append(BOUNDARY);
            sb.append(newLine);
            sb.append("Content-Disposition: form-data;name=\""+formName+"\";filename=\""+ fileName + "\"" + newLine);
            sb.append("Content-Type:application/octet-stream");
            sb.append(newLine);
            sb.append(newLine);
            
            out.write(sb.toString().getBytes());// 将参数头的数据写入到输出流中
            
            DataInputStream in = new DataInputStream(new FileInputStream(file));// 数据输入流,用于读取文件数据
            byte[] bufferOut = new byte[1024];
            int bytes = 0;
            
            while ((bytes = in.read(bufferOut)) != -1) {// 每次读1KB数据,并且将文件数据写入到输出流中
                out.write(bufferOut, 0, bytes);
            }
            
            out.write(newLine.getBytes());
            in.close();
            
            byte[] end_data = (newLine + boundaryPrefix + BOUNDARY
                               + boundaryPrefix + newLine).getBytes();
            
            out.write(end_data);
            out.flush();
            out.close();
    
            
            BufferedReader reader = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));
            String line = null;
            StringBuffer strs = new StringBuffer("");
            while ((line = reader.readLine()) != null) {
                strs.append(line);
            }
            baseResult = strs;
        } catch (Exception e) {
            baseResult = e.getMessage();
        }
        return baseResult;
    }
    

相关文章

网友评论

    本文标题:Java模拟post请求上传文件

    本文链接:https://www.haomeiwen.com/subject/jkpthhtx.html