美文网首页程序员
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