Java 如何将文件2发送到服务器

Java 如何将文件2发送到服务器,java,android,kotlin,Java,Android,Kotlin,我在发送带有2的音频文件时遇到困难。我得到文件:“okhttp3.MultipartBody$Part@8f3c9ed“。如何在request.file而不是request.body中发送文件?另外,如何将其作为文件发送(具有原始名称、缓冲区等属性)?这是我的密码: @FormUrlEncoded @POST("audio/upload") fun uploadAudio( @Part("file") file: Multi

我在发送带有2的音频文件时遇到困难。我得到
文件:“okhttp3.MultipartBody$Part@8f3c9ed“
。如何在request.file而不是request.body中发送文件?另外,如何将其作为文件发送(具有原始名称、缓冲区等属性)?这是我的密码:

@FormUrlEncoded
    @POST("audio/upload")
    fun uploadAudio(
        @Part("file") file: MultipartBody.Part,
        @Field("title") title: String,
        @Field("description") description: String,
        @Field("writer") writer: String,
        @Field("privacy") privacy: Int,
        @Field("duration") duration: Int,
        @Field("secretLink") secretLink: String,
        @Field("isForKids") isForKids: Boolean,
        @Field("language") language: String,
        @Field("tags") tags: List<Tag>,
    ): Call<Any>
@FormUrlEncoded
@发布(“音频/上传”)
趣味上传音频(
@部分(“文件”)文件:MultipartBody.Part,
@字段(“标题”)标题:字符串,
@字段(“说明”)说明:字符串,
@字段(“编写器”)编写器:字符串,
@字段(“隐私”)隐私:Int,
@字段(“持续时间”)持续时间:Int,
@字段(“secretLink”)secretLink:String,
@字段(“isForKids”)isForKids:Boolean,
@字段(“语言”)语言:字符串,
@字段(“标记”)标记:列表,
):呼叫
这里我称之为:

    private fun uploadAudio() {
        val sharedPreferences = context?.getSharedPreferences("sharedPrefs", Context.MODE_PRIVATE)
        if (title == null) {
            return Toast.makeText(requireContext(), "Title is required", Toast.LENGTH_LONG).show()
        }
        if (description == null) {
            return Toast.makeText(requireContext(), "Description is required", Toast.LENGTH_LONG).show()
        }
        if (newAudio == null) {
            return Toast.makeText(requireContext(), "Audio file is required", Toast.LENGTH_LONG).show()
        }

        mainContent.visibility = GONE
        newAudioProgressBar.visibility = VISIBLE

        submitButton.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.upload_avd, 0)
        val avdSubmitButton = submitButton.compoundDrawables[2] as AnimatedVectorDrawable
        avdSubmitButton.start()

        val inputStream = context?.contentResolver?.openInputStream(Uri.parse(newAudio))
        val requestFile = RequestBody.create(MediaType.parse("audio/mpeg"), File(newAudio))
        val body = MultipartBody.Part.createFormData("file", title, requestFile)

        RetrofitService().uploadAudio(
            body,
            title!!,
            description!!,
            sharedPreferences?.getString("token", null).toString(),
            privacy!!,
            audioDuration!! / 1000,
            secretLink.text.toString(),
            forKids!!,
            language!!,
            tagAdapter.tags
        ).enqueue(object : Callback<Any> {
            @SuppressLint("LogNotTimber")
            override fun onFailure(call: Call<Any>, t: Throwable) {
                d("#Error", "${t.message}")
                mainContent.visibility = VISIBLE
                newAudioProgressBar.visibility = GONE

                Toast.makeText(requireContext(), t.message, Toast.LENGTH_SHORT).show()
            }

            @SuppressLint("LogNotTimber")
            override fun onResponse(call: Call<Any>, response: Response<Any>) {
                navHostFragment.findNavController().navigate(R.id.myAudiosFragment)
                Toast.makeText(requireContext(), "Audio uploaded successfully!", Toast.LENGTH_SHORT).show()
            }
        })
    }
private fun uploadAudio(){
val SharedReferences=context?.getSharedReferences(“SharedRefers”,context.MODE\u PRIVATE)
if(title==null){
返回Toast.makeText(requireContext(),“需要标题”,Toast.LENGTH\u LONG.show())
}
if(description==null){
返回Toast.makeText(requireContext(),“需要说明”,Toast.LENGTH\u LONG.show()
}
如果(newAudio==null){
返回Toast.makeText(requireContext(),“需要音频文件”,Toast.LENGTH\u LONG.show())
}
mainContent.visibility=GONE
newAudioProgressBar.visibility=可见
submitButton.SetCompoundDrawableSwithinInstincBounds(0,0,R.drawable.upload_avd,0)
val avdSubmitButton=submitButton.compoundDrawables[2]作为动画矢量Drawable
avdSubmitButton.start()
val inputStream=context?.contentResolver?.openInputStream(Uri.parse(newAudio))
val requestFile=RequestBody.create(MediaType.parse(“音频/mpeg”)、File(newAudio))
val body=MultipartBody.Part.createFormData(“文件”、标题、请求文件)
更新服务()。上载音频(
身体,
标题
描述
SharedReferences?.getString(“令牌”,null).toString(),
隐私!!,
音频持续时间!!/1000,
secretLink.text.toString(),
叉子!!,
语言!!,
tagAdapter.tags
).enqueue(对象:回调{
@抑绒(“原木”)
覆盖失效时的乐趣(调用:调用,t:可丢弃){
d(“#错误”,“${t.message}”)
mainContent.visibility=可见
newAudioProgressBar.visibility=消失
Toast.makeText(requireContext(),t.message,Toast.LENGTH\u SHORT.show())
}
@抑绒(“原木”)
覆盖fun onResponse(调用:调用,响应:响应){
navHostFragment.findNavController().navigate(R.id.myAudiosFragment)
Toast.makeText(requireContext(),“音频上传成功!”,Toast.LENGTH\u SHORT.show()
}
})
}

当我尝试
文件(newAudio)
时,它说找不到文件。newAudio等于
audio.path

音频文件的路径是什么?@dinkar\u kumar,/document/primary:Music/Track28.mp3该文件存在,但它显示enoint(没有这样的文件或目录)@dinkar\u kumar,它是什么?