当前位置: 首页 > 知识库问答 >
问题:

使用Retrofit发布音频文件

方宜
2023-03-14

问题是这个。我正在发送音乐文件。我一直收到错误消息422。由于这个原因,我似乎无法正确定位我的身体

Content-Disposition: form-data; name="Content-Disposition: form-data; 
name="audio[file]"; filename="tr.mp3""
Content-Transfer-Encoding: binary
Content-Type: audio/mpeg
Content-Length: 6028060

和我的代码

@Multipart
@Headers({"Content-Type: multipart/form-data;", "Accept:application/json, text/plain, */*"})
@POST("audios")
Call<SoundResponse> saveSound(@Part ("Content-Disposition: form-data; name=\"audio[file]\"; filename=\"tr.mp3\"") RequestBody file,
                              @Query("auth_token") String authToken);

并调用此方法

        RequestBody body = RequestBody.create(MediaType.parse("audio/mpeg"), file);

        GeoService.saveSound(body,SoundResponseCallback, getAuthToken());

我还发现这个东西
通过Reform2将文件作为对象发送到服务器

在我看来,问题是该字段看起来像“音频[文件]”

谢谢你的帮助

共有1个答案

樊宏邈
2023-03-14

我找到了问题的答案。解决方案是必须将文件转换为字节

 private void sendFile(Uri data) {
    mParent.showProgress();
    MultipartBody.Part file = packFile(view.getContext(), "audio[file]", data);
    GeoService.saveSound(file, SoundResponseCallback, getAuthToken());
}

@Nullable
public static MultipartBody.Part packFile(@NonNull Context context, @NonNull String partName, @Nullable Uri fileUri) {
    if (fileUri == null) return null;
    ContentResolver cr = context.getContentResolver();
    String tp = cr.getType(fileUri);
    if (tp == null) {
        tp = "audio";
    }
    try {
        InputStream iStream = context.getContentResolver().openInputStream(fileUri);
        byte[] inputData = getBytes(iStream);
        RequestBody requestFile = RequestBody.create(MediaType.parse(tp), inputData);
        return MultipartBody.Part.createFormData(partName, fileUri.getLastPathSegment(), requestFile);
    } catch (Exception e) {
        return null;
    }
}

@Nullable
private static byte[] getBytes(@Nullable InputStream inputStream) throws IOException {
    if (inputStream == null) return null;
    ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
    int bufferSize = 1024;
    byte[] buffer = new byte[bufferSize];

    int len = 0;
    while ((len = inputStream.read(buffer)) != -1) {
        byteBuffer.write(buffer, 0, len);
    }
    return byteBuffer.toByteArray();
}
 类似资料:
  • 我尝试使用< code >翻新发送音频文件,但是< code>ResponseBody总是为空,状态为< code>500内部服务器错误,我尝试了许多不同的方法,但是没有任何效果 邮递员截图: 身体 标题 我的客户: addAudioComment方法: 请求:

  • 我使用相同的代码成功地发送了许多带有图像(jpg文件)的消息。我会尝试mp3、mp4、ogg和aac文件类型,但不起作用。 这是Twilio控制台中的错误消息: 错误-12300无效的内容类型Twilio无法处理提供的URL的内容类型。有关有效内容类型的更多信息,请参见Twilio标记XML文档。 消息Msg“试图检索MediaUrl返回了不受支持的内容类型。”

  • 问题内容: 我有200多个MP3文件,我需要使用静音检测来拆分其中的每个文件。我尝试了Audacity和WavePad,但它们没有批处理过程,将它们一一制作很慢。 场景如下: 分割曲目,而静音2秒或更长时间 然后在这些音轨的开头和结尾添加0.5 s并将其另存为.mp3 BitRate 192立体声 标准化卷以确保所有文件的卷和质量相同 我尝试了FFmpeg,但没有成功。 问题答案: 我发现pydu

  • 我对ffmpeg相当陌生,我正试图用另一个文件替换第一个音频文件的一部分。第二个文件可能太短,因此应该存在某种循环。 经过一些研究,我提出了以下命令参数,只要我只做一次替换,它就会给出输出。但我想做多个替换。我做错了什么有什么帮助吗?也非常欢迎对工作方式提出任何建议/意见。 (以下命令中的任何错别字都可以忽略,我通过脚本生成命令,为了便于使用,我简化了名称。) 作品(更换1件):

  • 尝试使用mediacontroller通过url播放音频文件 但我有一个错误: 09-11 10:28:23.970:E/MediaPlayer(912):尝试在没有有效MediaPlayer的情况下调用getDuration 09-11 10:28:23.970:E/MediaPlayer(912):错误(-38,0)09-11 10:28:23.990:E/MediaPlayer(912):尝

  • 我想在Discord语音频道中录制音频,并使用Discord机器人将其保存到文件中。 我收到音频每20毫秒作为pcm编码字节[],我想保存到一个文件。MP3是首选,但我没有其他文件格式的问题,如ogg(它可能更容易)。 我正在使用JDA版本我还包括lavaplayer版本用于其他功能。如果这些库是一个很好的库,这将是很有帮助的,但是如果我必须包含更多的库,这是没有问题的。