使用ajax/jquery REST api发送二进制数据

3
对于所有将此标记为重复的人,请查看您所参考的其他答案和我在这里提供的链接。它们的内容类型是audio/wav,而不是其他答案中提到的stream/octet。请不要在阅读其内容之前将问题标记为重复。
我正在尝试将音频文件发送到服务器,以便我可以获得JSON响应。这是IBM提供的服务,因此我们拥有他们提供的REST API。以下是我的ajax代码。
function recognize()
            {
                $.ajax
                ({
                    type: "POST",
                    url: "https://stream.watsonplatform.net/speech-to-text/api/v1/recognize",
                    dataType: 'json',
                    username: "xxxx",
                    password: "xxxx",
                    contentType: "audio/wav",


                    success: function (data){
                        alert(JSON.stringify(data)); 
                    }
                });
            }

以下是我将要进行的REST调用的IBM示例 -
curl -u "{username}":"{password}" \
-H "content-type: audio/wav" \
--data-binary @"/path/to/file.wav" \
"https://stream.watsonplatform.net/speech-to-text/api/v1/sessions/{session_id}/recognize"

链接示例页面和描述为 - http://www.ibm.com/smarterplanet/us/en/ibmwatson/developercloud/speech-to-text/api/v1/#recognize 我的问题是,我如何通过Ajax发送二进制文件?这实际上是一个phonegap应用程序。
这里有一个有趣的问题; 如果我将文件的URI发送到REST调用的标签中,它可以工作。如果我发送真实路径,则无法使用。为什么???

@Mark:看看我做的修改。 - PeakGen
你尝试过另一个问题中的方法吗?如果是这样,你应该将这些信息添加到你的问题中,并且包括任何关于为什么它不起作用的错误。如果你还没有尝试,请尝试一下。无论内容类型如何,二进制数据都应该是二进制数据。 - Mark
1个回答

2
你可以使用XMLHttpRequest发送二进制数据。
ar oReq = new XMLHttpRequest();
oReq.open("POST", url, true);
oReq.onload = function (oEvent) {
  // Uploaded.
};

var blob = new Blob(['abc123'], {type: 'audio/wav'});

oReq.send(blob);

谢谢您的回复。我该如何添加上述其他剩余参数? - PeakGen
另一件事,abc123 是音频文件的路径吗? - PeakGen
@PeakGen 您说得对,我没有包括文件扩展名,我的错。我也会看一下如何传递参数。 - Filix Mogilevsky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接