[英]How to upload an image to storage firebase from an url
当我从 edamam API 获取 ImageURI 并尝试上传它时,它会出现一些错误,当我转换 BitMap 时我没有得到,我在拍照并将其转换为 URI 时,我试图将 ImageURI 转换为 Bitmap将它传递给相同的函数,但这不起作用。 下面是有效的功能
fun bitmapToUri(imageBitmap: Bitmap, cacheDir: File): Uri {
val baos = ByteArrayOutputStream()
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
data2 = baos.toByteArray()
val file = File(cacheDir, imageBitmap.toString())
// When calling it with imageBitmap.toString() each item has its image (before the same one repeated)
file.delete()
// Just in case there is another File
file.createNewFile()
val fileOS = FileOutputStream(file)
fileOS.write(data2)
fileOS.flush()
fileOS.close()
baos.close()
return file.toUri()
}
我收到这些错误
E/UploadTask:找不到要上传的文件: https ://www.edamam.com/food-img/28a/28ae0e32feff919253b2cd17c47d2f23.jpg E/StorageException:发生了 StorageException。 发生未知错误,请检查服务器响应的 HTTP 结果代码和内部异常。 代码:-13000 HttpResult:0 E/StorageException:没有内容提供者: https ://www.edamam.com/food-img/28a/28ae0e32feff919253b2cd17c47d2f23.jpg java.io.FileNotFoundException:没有内容提供者: https://www. edamam.com/food-img/28a/28ae0e32feff919253b2cd17c47d2f23.jpg
这是我必须上传到存储的功能
private fun uploadImage() {
val name = binding.inputName?.editText?.text.toString()
val provider = binding.inputProvider?.editText?.text.toString()
val address = binding.inputStreet?.editText?.text.toString()
val fileName = "$name $provider $address"
Log.d("INFO IMAGE URI UPLOAD->>", imageUri.toString())
storage = FirebaseStorage.getInstance().getReference("images/$fileName")
storage.putFile(imageUri).addOnSuccessListener {
binding.imageButton.setImageURI(null)
}.addOnFailureListener {
Toast.makeText(this@NewItem, "Image Not Uploaded", Toast.LENGTH_SHORT).show()
}
}
这是我传递给 imageUri 的值
imageUri = apiCallBody.listHints.first().food.image.toUri()
这是哪个值
https://www.edamam.com/food-img/862/862434152a3191f30c889f10eb2989b0.jpg
我将所选图像设置为图像视图然后上传的方法是
private val ImageLauncher = registerForActivityResult(ActivityResultContracts.GetContent()){ uri: Uri? ->
uri?.let { binding.GroupImageAdd.setImageURI(uri)
ImageUri = uri
}
}
Uri 是从文件中选择图像时设置的本地值,然后
fun UploadImage(UUid: String, uri: Uri, ImageType: String) {
val storageRef = FirebaseStorage.getInstance().reference
Log.d("URI", uri.toString())
val task = storageRef.child("**Image Directory").putFile(uri)
task.addOnSuccessListener {
Log.d("UploadImage", "Task Is Successful")
}.addOnFailureListener {
Log.d("UploadImageFail", "Image Upload Failed ${it.printStackTrace()}")
}
}
不确定这是否有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.