首页 > 解决方案 > OkHttp 上传文件 - 找不到错误文件 - Android Kotlin

问题描述

我对 Kotlin 和 OkHttp 有点陌生。我正在尝试从图库中选择一张图片并通过 OkHttp 上传。我收到错误“找不到文件”。我相信问题出在mSelectedImageFileUri. 任何帮助将不胜感激!我有以下代码:

清单文件:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

活动

companion object {
        private const val READ_STORAGE_PERMISSION_CODE = 1
        private const val PICK_IMAGE_REQUEST_CODE = 2
        private val MEDIA_TYPE_JPG = "image/jpg".toMediaType()
}

 private fun showImageChooser(){
        var galleryIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
        startActivityForResult(galleryIntent, PICK_IMAGE_REQUEST_CODE)
    }


override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if(resultCode == Activity.RESULT_OK && requestCode == PICK_IMAGE_REQUEST_CODE && data!!.data != null){
                mSelectedImageFileUri = data.data
     }
}



private val client = OkHttpClient()

fun uploadFile (){

        val requestBody = MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("Title","Name")
                .addFormDataPart("Image","Image.jpg",File("${mSelectedImageFileUri}").asRequestBody(MEDIA_TYPE_JPG))
                .build()
        val request = Request.Builder()
                .url("custom url")
                .post(requestBody)
                .build()
        
        client.newCall(request).enqueue(object : Callback {

            override fun onFailure(call: Call, e: IOException) {
                println("ERROR"+e)
            }

            override fun onResponse(call: Call, response: Response) {
                val body = response?.body?.string()
               
                runOnUiThread {
                    //do something
                }

            }
        })

}

标签: androidkotlinokhttp

解决方案


推荐阅读