我正在使用AWS API网关和OkHTTP发送音频。效果很好。但当我添加认证头信息时它会显示错误
Stream Close
我正在使用Ghedeon的库添加签名。
String API_GATEWAY_SERVICE_NAME = "execute-api";
RequestBody requestFile = create("audio/wave", inputStream);
AwsInterceptor awsInterceptor = new AwsInterceptor(new AWSCredentialsProvider() {
@Override
public AWSCredentials getCredentials() {
return new BasicAWSCredentials(access_key_id, secret_access_key);
}
@Override
public void refresh() {}
}, API_GATEWAY_SERVICE_NAME, region);
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(awsInterceptor)
.build();
okhttp3.Request request = new okhttp3.Request.Builder()
.url(url)
.post(requestFile)
.build();
Response response = okHttpClient.newCall(request).execute();
String response_body = response.body().string();
我使用相同的代码上传JSON数据。使用
可以很好地工作MediaType"应用程序/json"
,不报错。
如何修改此代码以使用它进行音频上传?是否有其他的方式来发送音频使用API网关?
好的。首先,这个库能够使用带有签名的API网关将音频文件上传到AWS。
结果是当我们调用
时创建("音频/wave" inputStream)
这个创建函数关闭inputstream在计算它的长度之前。长度在header"content-length">
我所做的就是计算inputstream的长度在调用create函数之前,然后在header中使用。