是否可以使用 URL 而不是 Android 中的 SDK 将图像上传到 firebase 存储?
Is it possible to upload image to firebase storage using URL instead of SDK in Android?
我正在尝试使用 url 而不是使用 Retrofit 的 SDK 从 android 应用程序将文件上传到 firebase 存储。这是我上传图片的方法,
fun uploadImageToUrl() {
val url = "https://firebasestorage.googleapis.com/v0/b/xxxxxxx-xxxx.appspot.com/o/${bean.firebaseUid}/idProofs/${bean.documentTitle}.jpg/"
var client = OkHttpClient.Builder().build()
val retrofit = Retrofit.Builder()
.baseUrl(url).addConverterFactory(GsonConverterFactory.create())
.client(client)
.build()
var service = retrofit.create(UploadService::class.java)
var params = HashMap<String, RequestBody>()
var reqFile = RequestBody.create(MediaType.parse("image/*"), photoFile)
var header = "Bearer ${bean.firebaseToken}"
var body = MultipartBody.Part.createFormData("image", bean.documentTitle, reqFile)
var response = service.uploadDocument(header, body)
response.enqueue(object: Callback<ResponseBody> {
override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) {
Log.e("Upload Response", response!!.message())
}
override fun onFailure(call: Call<ResponseBody>?, t: Throwable?) {
Log.e("Upload Failed", t!!.localizedMessage)
}
})
}
这是服务接口中的方法。
interface UploadService {
@Multipart
@Headers("Accept: application/json")
@POST("/?alt=media")
fun uploadDocument(@Header("Authorization") header: String, @Part image: MultipartBody.Part): retrofit2.Call<ResponseBody>
}
但是没有任何反应,没有错误消息,没有调用 onResponse、onFailure 方法,没有显示图像。
我的错。 URL应该是这样的
https://firebasestorage.googleapis.com/v0/b/xxxxxxx-xxxx.appspot.com/o/${bean.firebaseUid}%2FidProofs%2F${bean.documentTitle}.jpg/
而不是这个
https://firebasestorage.googleapis.com/v0/b/xxxxxxx-xxxx.appspot.com/o/${bean.firebaseUid}/idProofs/${bean.documentTitle}.jpg/
我不知道为什么,但它正在工作。
我正在尝试使用 url 而不是使用 Retrofit 的 SDK 从 android 应用程序将文件上传到 firebase 存储。这是我上传图片的方法,
fun uploadImageToUrl() {
val url = "https://firebasestorage.googleapis.com/v0/b/xxxxxxx-xxxx.appspot.com/o/${bean.firebaseUid}/idProofs/${bean.documentTitle}.jpg/"
var client = OkHttpClient.Builder().build()
val retrofit = Retrofit.Builder()
.baseUrl(url).addConverterFactory(GsonConverterFactory.create())
.client(client)
.build()
var service = retrofit.create(UploadService::class.java)
var params = HashMap<String, RequestBody>()
var reqFile = RequestBody.create(MediaType.parse("image/*"), photoFile)
var header = "Bearer ${bean.firebaseToken}"
var body = MultipartBody.Part.createFormData("image", bean.documentTitle, reqFile)
var response = service.uploadDocument(header, body)
response.enqueue(object: Callback<ResponseBody> {
override fun onResponse(call: Call<ResponseBody>?, response: Response<ResponseBody>?) {
Log.e("Upload Response", response!!.message())
}
override fun onFailure(call: Call<ResponseBody>?, t: Throwable?) {
Log.e("Upload Failed", t!!.localizedMessage)
}
})
}
这是服务接口中的方法。
interface UploadService {
@Multipart
@Headers("Accept: application/json")
@POST("/?alt=media")
fun uploadDocument(@Header("Authorization") header: String, @Part image: MultipartBody.Part): retrofit2.Call<ResponseBody>
}
但是没有任何反应,没有错误消息,没有调用 onResponse、onFailure 方法,没有显示图像。
我的错。 URL应该是这样的
https://firebasestorage.googleapis.com/v0/b/xxxxxxx-xxxx.appspot.com/o/${bean.firebaseUid}%2FidProofs%2F${bean.documentTitle}.jpg/
而不是这个
https://firebasestorage.googleapis.com/v0/b/xxxxxxx-xxxx.appspot.com/o/${bean.firebaseUid}/idProofs/${bean.documentTitle}.jpg/
我不知道为什么,但它正在工作。