開發者嘗試手動拼裝 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 請求極易出錯(換行符、邊界符、編碼等)。強烈建議使用成熟網路庫:
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() { ... });
@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。audio/mpeg、audio/mp4、audio/wav,需與實際文件格式匹配。MediaStore 或 FileProvider 獲取 URI。詳細實現可參考:Android 文件上傳完整範例