Select 图片并上传到服务器 android
Select image and upload to server android
我想通过从图库中选择将图片上传到服务器
通过
打开画廊
val pickPhoto = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startForResult.launch(pickPhoto)
然后activity结果
val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult())
{ result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
// you will get result here in result.data
if(result.data!=null){
val f=File(result.data.toString())
println(f.absolutePath)
}
}
}
但是我认为文件不正确。
我的api电话就像
@Multipart
@PUT
fun uploadFile(
@Url url:String,
@Part("file") name: RequestBody,
@Part filepart: MultipartBody.Part
): Response<String>
我称其为
val fileToUpload: MultipartBody.Part =
MultipartBody.Part.createFormData("file", file.getName())
val filename: RequestBody =
file.getName().toRequestBody("text/plain".toMediaTypeOrNull())
Api.uploadFile(uploadUrl,filename,fileToUpload)
这是一个流上传
问题仅由 URI 引起,因为它没有获得正确的文件绝对路径
获取绝对路径
private fun getRealPathFromURI(contentURI: Uri): String {
val result: String
val cursor: Cursor? = requireContext().contentResolver.query(contentURI, null, null, null, null)
if (cursor == null) {
result = contentURI.getPath().toString()
} else {
cursor.moveToFirst()
val idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA)
result = cursor.getString(idx)
cursor.close()
}
return result
}
activity 结果
val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult())
{ result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
// you will get result here in result.data
if(result.data!=null){
val f=File(getRealPathFromURI(result.data?.data!!))
viewModel.uploadCheque(f)
}
}
}
我想通过从图库中选择将图片上传到服务器
通过
打开画廊val pickPhoto = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
startForResult.launch(pickPhoto)
然后activity结果
val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult())
{ result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
// you will get result here in result.data
if(result.data!=null){
val f=File(result.data.toString())
println(f.absolutePath)
}
}
}
但是我认为文件不正确。
我的api电话就像
@Multipart
@PUT
fun uploadFile(
@Url url:String,
@Part("file") name: RequestBody,
@Part filepart: MultipartBody.Part
): Response<String>
我称其为
val fileToUpload: MultipartBody.Part =
MultipartBody.Part.createFormData("file", file.getName())
val filename: RequestBody =
file.getName().toRequestBody("text/plain".toMediaTypeOrNull())
Api.uploadFile(uploadUrl,filename,fileToUpload)
这是一个流上传
问题仅由 URI 引起,因为它没有获得正确的文件绝对路径
获取绝对路径
private fun getRealPathFromURI(contentURI: Uri): String {
val result: String
val cursor: Cursor? = requireContext().contentResolver.query(contentURI, null, null, null, null)
if (cursor == null) {
result = contentURI.getPath().toString()
} else {
cursor.moveToFirst()
val idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA)
result = cursor.getString(idx)
cursor.close()
}
return result
}
activity 结果
val startForResult = registerForActivityResult(ActivityResultContracts.StartActivityForResult())
{ result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
// you will get result here in result.data
if(result.data!=null){
val f=File(getRealPathFromURI(result.data?.data!!))
viewModel.uploadCheque(f)
}
}
}