java代码实现postman表单传输文件数据到第三方API

 最近工作做遇到的问题:

                需求:前端传递一个附件ID接收到之后去查询数据库表中的文件附件ID通过工具类的方法获取到文件流,再把文件数据和文件存储地址 传给第三方API存储到指定的位置。

                问题:获取到文件流发送过去发现对方不能接收流的数据,只能接收完整的File数据,最后我要先把获取到的流下载到本地,再把下载的完整的文件传递给第三方API(难点:java代码模仿postman发送表单数据,)

/**
     * 接收"杰"提供的  {文件}
     * 调用"平"的API传递 文件
     *
     * @param request  HttpServletRequest 对象
     * @param response HttpServletResponse 对象
     * @return String
     */
    @POST
    @Path("/sendPartInfo")
    @Produces({MediaType.APPLICATION_JSON})
    public String sendPartInfo(@Context HttpServletRequest request, @Context HttpServletResponse response) {

        // 获取上传的文件id
        Map<String, Object> map = ParamUtil.request2Map(request);
        Object id = map.get("id");
//        Object address = map.get("address");
//        String addressString = (String) address;

        //查询imagefileid的值
        HashMap<String, String> image = new HashMap<>();
        RecordSet rs = new RecordSet();
        String sql = "select  * from DocImageFile where DOCID =?";
        rs.executeQuery(sql, id);
        while (rs.next()) {
            String imagefileid = rs.getString("imagefileid");
            image.put("imagefileid", imagefileid);
        }
        String imagefileid = image.get("imagefileid");
        int imageId = Integer.parseInt(imagefileid);


        //创建返回集合
        HashMap<Object, Object> map1 = new HashMap<>();

        // 通过附件id获取文件流
        InputStream inputStreamByImagefileId = FileStreamUtil.getInputStreamByImagefileId(imageId);

        String fileNameByImagefileId = FileStreamUtil.getFileNameByImagefileId(imageId);

        if (inputStreamByImagefileId == null) {

            map1.put("msg", "查询到的文件流为空");
            map1.put("code", "-1");
            return JSONObject.toJSONString(map1); // 返回文件流为空的信息
        }
//        String savePath = "D:\\域文件夹" + addressString + fileNameByImagefileId;  // 文件保存路径
        String savePath = "D:\\域文件夹\\3_部品承认" + fileNameByImagefileId;  // 文件保存路径
        try {
            FileOutputStream outputStream = new FileOutputStream(savePath);

            byte[] buffer = new byte[1024];
            int length;
            while ((length = inputStreamByImagefileId.read(buffer)) != -1) {
                outputStream.write(buffer, 0, length);
            }
            map1.put("code", "1");
            map1.put("msg", "1.文件下载到本地已完成");

            System.out.println(JSONObject.toJSONString(map1));

        } catch (IOException e) {
            map1.put("code", "-1");
            map1.put("msg", "文件下载失败,1.文件下载到本地异常");
            System.out.println(JSONObject.toJSONString(map1));
        }


        String apiUrl = "http://192.168.0.191:3000/upload";
        String fileParamName = "file[0]"; // 文件参数的名称
        String uploadPath = "\\3_部品承认\\3_11_发行受控档"; // 文本参数的值
        String textParamName = "uploadPath"; // 文本参数的名称

        try {
            URL url = new URL(apiUrl);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setDoOutput(true);
            connection.setDoInput(true);

            // 设置请求头
            String boundary = "<calculated when request is sent>";
            connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);

            OutputStream outputStream = connection.getOutputStream();
            PrintWriter writer = new PrintWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8), true);

            // 写入文本参数
            writer.append("--").append(boundary).append("\r\n");
            writer.append("Content-Disposition: form-data; name=\"").append(textParamName).append("\"").append("\r\n");
            writer.append("\r\n");
            writer.append(uploadPath).append("\r\n");

            // 写入文件参数
            writer.append("--").append(boundary).append("\r\n");
            writer.append("Content-Disposition: form-data; name=\"").append(fileParamName).append("\"; filename=\"").append(new File(savePath).getName()).append("\"").append("\r\n");
            writer.append("Content-Type: application/octet-stream").append("\r\n");
            writer.append("\r\n");
            writer.flush();

            // 写入文件内容
            try (FileInputStream fileInputStream = new FileInputStream(savePath)) {
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = fileInputStream.read(buffer)) != -1) {
                    outputStream.write(buffer, 0, bytesRead);
                }
            }

            outputStream.flush();

            // 写入结束标记
            writer.append("\r\n");
            writer.append("--").append(boundary).append("--").append("\r\n");
            writer.flush();

            // 获取响应
            int responseCode = connection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // 读取响应数据
                InputStream inputStream = connection.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
                StringBuilder respons = new StringBuilder();
                String line;
                while ((line = reader.readLine()) != null) {
                    respons.append(line);
                }
                reader.close();

                map1.put("code", "1");
                map1.put("msg", "上传成功");

            } else {
                map1.put("code", "-1");
                map1.put("msg", "上传失败,文件保存异常");
            }

            connection.disconnect();
        } catch (IOException e) {
            Map<String, Object> map2 = new HashMap<>();
            map2.put("msg", "连接异常");
            map2.put("code", "0");
            return JSONObject.toJSONString(map2);
        }


        //删除本地下载的文件
        File file = new File(savePath);
        if (file.isFile()) {
            if (file.delete()) {
                System.out.println("已删除文件: " + file.getName());
            } else {
                System.out.println("无法删除文件: " + file.getName());
            }
        } else {
            System.out.println("指定路径不是一个文件");
        }

        return JSONObject.toJSONString(map1);
    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要使用Java开发实现类似Postman的功能,你可以使用Apache HttpClient库来发送HTTP请求。下面是一个示例代码,演示如何发送POST请求: ```java import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; public class PostmanExample { public static void main(String[] args) { try { // 创建HttpClient对象 HttpClient client = HttpClientBuilder.create().build(); // 创建HttpPost对象,并设置URL HttpPost post = new HttpPost("http://example.com/api/endpoint"); // 设置请求头 post.setHeader("Content-Type", "application/json"); // 设置请求体 String requestBody = "{\"key\": \"value\"}"; StringEntity entity = new StringEntity(requestBody); post.setEntity(entity); // 发送请求 HttpResponse response = client.execute(post); // 获取响应实体 HttpEntity responseEntity = response.getEntity(); // 解析响应结果 String responseString = EntityUtils.toString(responseEntity); System.out.println(responseString); } catch (Exception e) { e.printStackTrace(); } } } ``` 你需要替换示例代码中的URL、请求头和请求体,以适应你的实际需求。这个示例代码演示了如何发送一个带有JSON请求体的POST请求,并打印出响应结果。你可以根据需要进行进一步的扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值