首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android 上傳音頻文件至伺服器實現指南

     編輯:程式設計疑難解答

問題

開發者嘗試手動拼裝 Multipart/Form-Data 請求體上傳音頻,代碼片段如下:

sb.append(PREFIX);
sb.append(BOUNDARY);
sb.append(LINE_END);
sb.append("Content-Disposition: form-data; name=\"voices\"; filename=\""+file1.getName()+"\""+LINE_END);
sb.append("Content-Type: audio/mpeg; charset="+CHARSET+LINE_END);
sb.append(LINE_END);

但上傳失敗,尋求指導。

解決方案

手動拼裝 HTTP 請求極易出錯(換行符、邊界符、編碼等)。強烈建議使用成熟網路庫:

方案一:OkHttp(推薦)

OkHttpClient client = new OkHttpClient();
RequestBody requestBody = new MultipartBody.Builder()
    .setType(MultipartBody.FORM)
    .addFormDataPart("voices", file.getName(),
        RequestBody.create(MediaType.parse("audio/mpeg"), file))
    .build();
Request request = new Request.Builder()
    .url("https://your-server.com/upload")
    .post(requestBody)
    .build();
client.newCall(request).enqueue(new Callback() { ... });

方案二:Retrofit + OkHttp

@Multipart
@POST("upload")
Call<ResponseBody> uploadAudio(@Part MultipartBody.Part audio);

File file = new File(path);
RequestBody requestFile = RequestBody.create(MediaType.parse("audio/mpeg"), file);
MultipartBody.Part part = MultipartBody.Part.createFormData("voices", file.getName(), requestFile);
service.uploadAudio(part).enqueue(...);

關鍵點提醒

  • 確認伺服器端 Content-Type 解析支援 multipart/form-data。
  • 音頻 MIME 類型常用 audio/mpeg、audio/mp4、audio/wav,需與實際文件格式匹配。
  • 大文件上傳需啟用斷點續傳或分片上傳,避免 OOM。
  • Android 10+ 需適配 Scoped Storage,使用 MediaStore 或 FileProvider 獲取 URI。

參考資源

詳細實現可參考:Android 文件上傳完整範例

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved