httpClient 如何写一个参数是JSON串,然后带一个音频文件的POST 提交

发布于 2022-09-06 09:27:12 字数 2143 浏览 37 评论 0

项目有一个HTTP方式访问的,可以同时提交语音文件的接口。接口提交格式要求如下:
(POST)[ServiceUrl]/quickAnalysisFromData
说明:包体中使用multipart/form-data的方法传输json参数串和数据,格式为utf8,不能包含中文等字符。第一部分为json格式的参数串;第二部分是二进制音频数据流。
示例是:
请求包体:带二进制音频流的方式:

--${bound}
{
    "resultFilePath": "ftp: //10.0.1.10: 121/result/",
    "audioFormat": -1,
    "property": "chinese_8k_common",
    "audioChannelType": 0,
    "priorityProcess": 1,
    "resultType": 2
}
--${bound}
....二进制流音频数据.....
--${bound}--

我写的方法如下,因为项目在异地,没办法连接服务器测试,对方支持一问三不知,总觉得按要求json参数这样传递不对,请各位大神帮忙看一下是否合适!

public static void main(String[] args) {
        // TODO Auto-generated method stub
        HttpClient client = new HttpClient();
        client.getHostConfiguration().setProxy("127.0.0.1", 8888);//给fidder抓包用
        PostMethod myPost = new PostMethod(URL);
        try {
            myPost.setRequestHeader("Content-Type", "multipart/form-data");
            
        //参数部分
            Map map= new HashMap();
            map.put("app_key", app_key);
            map.put("dev_key", dev_key);
            map.put("cap_key", cap_key);
            map.put("domain", "common");
            map.put("audioformat", "");
            map.put("cap_key", cap_key);
            map.put("cap_key", cap_key);
            
            JSONObject jsonObj = new JSONObject();
            String jsonStr=jsonObj.toJSONString(map);//转成json串

            
            //添加Part---------------------
             File f = new File("D://voice//fccf52889872c9cee8cd1bf0ed234069.amr");
              Part[] parts = {
                  new StringPart("jsonStr",jsonStr,"UTF-8"),
                  new FilePart(f.getName(), f)
              };
              
              MultipartRequestEntity entity = new MultipartRequestEntity(parts, myPost.getParams());
               myPost.setRequestEntity(entity);
               
               
            int statusCode = client.executeMethod(myPost);
            String.format("%d", statusCode);
            System.out.println(statusCode);

        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文