Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
上传图片时出现Android FireBase错误_Android_Firebase_Firebase Storage - Fatal编程技术网

上传图片时出现Android FireBase错误

上传图片时出现Android FireBase错误,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,我正在尝试通过本地文件方法上传图片 UploadTask uploadTask = currentPicRef.putFile(file, metadata); 当用户从多媒体资料中选择图像或通过相机拍照时,照片将保存在外部存储器中,我将uri保存在共享首选项中 我使用setImageURI(uri)方法成功地将图像加载到imageview中,但是当我调用firebase方法并使用相同的uri(uri file=uri.fromFile(new file(fileName));) 我得到了错误

我正在尝试通过本地文件方法上传图片

UploadTask uploadTask = currentPicRef.putFile(file, metadata);
当用户从多媒体资料中选择图像或通过相机拍照时,照片将保存在外部存储器中,我将uri保存在共享首选项中

我使用
setImageURI(uri)
方法成功地将图像加载到imageview中,但是当我调用firebase方法并使用相同的uri(
uri file=uri.fromFile(new file(fileName));

我得到了错误

找不到要上载的文件:file:///content%3A/media/external/images/media/22943

但是当我使用log检查本地文件时

uri是content://media/external/images/media/22943

还值得一提的是,当我在firebase中使用
uri.parse()
而不是
uri.fromFile()
从本地文件上载时,它上载了元数据,但没有上载照片本身


有什么办法吗?

不管怎样,可能有点晚了:

找不到要上载的文件:file:///content%3A/media/external/images/media/22943

我认为您可能存在url编码问题(请参阅文件uri中的%3A

尝试解码uri
urifile=uri.fromFile(新文件名)),然后将其传递给Firebase存储引用

如果它不起作用,您可以尝试在共享首选项中保存本地图像路径(我假设,当您从gallery或camera获取图像时,您也可以拥有本地路径),并使用此方法将图像上载到存储Firebase中


希望能有所帮助。

文件名可以确定
文件URI.toString()
。这对我很有用:

Uri uploadUri = Uri.fromFile(new File(fileUri.toString()));
下面是一个有效的示例:

// [START upload_from_uri]
private void uploadFromUri(Uri fileUri) {

    Uri uploadUri = Uri.fromFile(new File(fileUri.toString()));

    Log.d(TAG, "uploadFromUri:src:" + fileUri.toString());

    // [START get_child_ref]
    // Get a reference to store file at photos/<FILENAME>.jpg
    final StorageReference photoRef = mStorageRef.child("photos").child(uploadUri.getLastPathSegment());
    // [END get_child_ref]

    // Upload file to Firebase Storage
    // [START_EXCLUDE]
    showProgressDialog();
    // [END_EXCLUDE]
    Log.d(TAG, "uploadFromUri:dst:" + photoRef.getPath());

    photoRef.putFile(uploadUri)
            .addOnSuccessListener(this, new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    // Upload succeeded
                    Log.d(TAG, "uploadFromUri:onSuccess");

                    // Get the public download URL
                    mDownloadUrl = taskSnapshot.getMetadata().getDownloadUrl();

                    // [START_EXCLUDE]
                    hideProgressDialog();
                    updateUI(mAuth.getCurrentUser());
                    // [END_EXCLUDE]
                }
            })
            .addOnFailureListener(this, new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Upload failed
                    Log.w(TAG, "uploadFromUri:onFailure", exception);

                    mDownloadUrl = null;

                    // [START_EXCLUDE]
                    hideProgressDialog();
                    Toast.makeText(MainActivity.this, "Error: upload failed",
                            Toast.LENGTH_SHORT).show();
                    updateUI(mAuth.getCurrentUser());
                    // [END_EXCLUDE]
                }
            });
}
// [END upload_from_uri]
/[从uri开始上传]
私有void uploadFromUri(Uri fileUri){
Uri uploadUri=Uri.fromFile(新文件(fileUri.toString());
d(标记为uploadFromUri:src:+fileUri.toString());
//[开始获取儿童参考]
//获取存储文件在photos/.jpg的引用
final-StorageReference photoRef=mStorageRef.child(“照片”).child(uploadUri.getLastPathSegment());
//[END get_child_ref]
//将文件上载到Firebase存储
//[开始时不包括]
showProgressDialog();
//[完]
Log.d(标记“uploadFromUri:dst:+photoRef.getPath());
photoRef.putFile(上传URI)
.addOnSuccessListener(此,新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//上传成功
d(标记“uploadFromUri:onSuccess”);
//获取公共下载URL
mDownloadUrl=taskSnapshot.getMetadata().getDownloadUrl();
//[开始时不包括]
hideProgressDialog();
updateUI(mAuth.getCurrentUser());
//[完]
}
})
.addOnFailureListener(此,新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//上载失败
w(标记“uploadFromUri:onFailure”,异常);
mDownloadUrl=null;
//[开始时不包括]
hideProgressDialog();
Toast.makeText(MainActivity.this,“错误:上载失败”,
吐司。长度(短)。show();
updateUI(mAuth.getCurrentUser());
//[完]
}
});
}
//[结束从\u uri上传\u]