kotlin 上传音频文件与二进制体与翻新

5rgfhyps  于 2023-02-13  发布在  Kotlin
关注(0)|答案(2)|浏览(150)

我需要上传音频文件与二进制机构一样,在 Postman 图像波纹管改型:

我怎样才能上传音频文件与二进制机构一样的形象与翻新?
这是我所做的,但它不工作:

@Multipart
@POST("upload")
fun uploadAudio(
    @Part audio_file: MultipartBody.Part
): Call<ModelGetAudioUrl>

这是我如何准备多部分体的音频文件。部分:

w8rqjzmb

w8rqjzmb1#

根据你的截图,你可能不想使用一个多部分的身体。

@POST("upload")
fun uploadAudio(@Body audio_file: TypedInput): Call<ModelGetAudioUrl>

@Body audio_file: RequestBody应该可以工作(参见How to send byte[] array in retrofit)。

mf98qq94

mf98qq942#

我用okhttp来解决这个问题:

val client = OkHttpClient().newBuilder()
        .callTimeout(90, TimeUnit.SECONDS)
        .readTimeout(90, TimeUnit.SECONDS)
        .connectTimeout(90, TimeUnit.SECONDS)
        .writeTimeout(90, TimeUnit.SECONDS)
        .build();
    val mediaType = "audio/wave".toMediaTypeOrNull();
    val body = RequestBody.create(mediaType, soundFile)
    val request = Request.Builder()
        .url("https://api.assemblyai.com/v2/upload")
        .method("POST", body)
        .addHeader("authorization", "99fa2a59e27e4688b9f7edcdc8ed7185")
        .addHeader("Transfer-Encoding", "chunked")
        .addHeader("Content-Type", "audio/wave")
        .build()

    Thread {

        try {

            val response = client.newCall(request).execute().use {

                if (it.isSuccessful) {

                    val str = it.body?.string()

                    if (!str.isNullOrEmpty()) {

                        val json = JSONObject(str)

                        sendUrlToTranscript(json.getString("upload_url"))

                    }

                }

                context.runOnUiThread {

                    if (!it.isSuccessful) {

                        loading.hideDialog()

                    }

                }

            }

        }catch (e: Exception) {

            e.printStackTrace()
            Log.d("uploadAudio", "uploadAudio: ${e.message}")

        }

    }.start()

相关问题