Android 使用Firebase上载照片时出现的问题

Android 使用Firebase上载照片时出现的问题,android,firebase,firebase-storage,Android,Firebase,Firebase Storage,我无法通过firebase上传图像。 代码如下: //... //Storage mFirebaseStorage = FirebaseStorage.getInstance(); mUserphotos = mFirebaseStorage.getReference().child("user/@userID"); mTestphotos = mFirebaseStorage.getReference().child("user/testPhotos"); //

我无法通过firebase上传图像。 代码如下:

//...
    //Storage
    mFirebaseStorage = FirebaseStorage.getInstance();
    mUserphotos = mFirebaseStorage.getReference().child("user/@userID");
    mTestphotos = mFirebaseStorage.getReference().child("user/testPhotos");
//...
    public void uploadImage(Uri uri) {
        Uri file = Uri.fromFile(new File("user/testPicture"));
        StorageReference testPath = mTestphotos.child("images/"+file.getLastPathSegment());
        UploadTask uploadTask = testPath.putFile(file);
        // Register observers to listen for when the download is done or if it fails
        uploadTask.addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception exception) {
                // Handle unsuccessful uploads
                Toast.makeText(MainActivity.this, "failure",     Toast.LENGTH_SHORT).show();
            }
        }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
                Uri downloadUrl = taskSnapshot.getDownloadUrl();
                Toast.makeText(MainActivity.this, "It worked", Toast.LENGTH_SHORT).show();
            }
        });
//...
/。。。
//储藏
mFirebaseStorage=FirebaseStorage.getInstance();
mUserphotos=mFirebaseStorage.getReference().child(“user/@userID”);
mTestphotos=mFirebaseStorage.getReference().child(“用户/testPhotos”);
//...
公共无效上载映像(Uri){
urifile=Uri.fromFile(新文件(“用户/testPicture”);
StorageReference testPath=mTestphotos.child(“images/”+file.getLastPathSegment());
UploadTask UploadTask=testPath.putFile(文件);
//注册观察员,以便在下载完成时或下载失败时监听
uploadTask.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
//处理不成功的上传
Toast.makeText(MainActivity.this,“failure”,Toast.LENGTH_SHORT.show();
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//taskSnapshot.getMetadata()包含文件元数据,如大小、内容类型和下载URL。
Uri downloadUrl=taskSnapshot.getDownloadUrl();
Toast.makeText(MainActivity.this,“它起作用了”,Toast.LENGTH_SHORT.show();
}
});
//...
为了节省时间,是的,我确信uri获得了正确的照片。上传的图像还有更多内容

//获取存储引用
    //getting the storage reference
    // filePath  is Uri
    // "uploads/" is STORAGE_PATH_UPLOADS
    StorageReference sRef = storageReference.child("uploads/" + System.currentTimeMillis() + "." + getFileExtension(filePath));

    //adding the file to reference 
    sRef.putFile(filePath)
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                    //displaying success toast 
                    Toast.makeText(getApplicationContext(), "File Uploaded ", Toast.LENGTH_LONG).show();

                    //creating the upload object to store uploaded image details 
                    Upload upload = new Upload(editTextName.getText().toString().trim(), taskSnapshot.getDownloadUrl().toString());

                    //adding an upload to firebase database 
                    String uploadId = mDatabase.push().getKey();
                    mDatabase.child(uploadId).setValue(upload);
                }
            })
            .addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    progressDialog.dismiss();
                    Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
                }
            })
            .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                    //displaying the upload progress 
                    double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                    progressDialog.setMessage("Uploaded " + ((int) progress) + "%...");
                }
            });
//文件路径是Uri //“uploads/”是存储路径上传 StorageReference sRef=StorageReference.child(“uploads/”+System.currentTimeMillis()+”+getFileExtension(filePath)); //将文件添加到引用 sRef.putFile(文件路径) .addOnSuccessListener(新的OnSuccessListener(){ @凌驾 成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){ //展示成功祝酒词 Toast.makeText(getApplicationContext(),“上传文件”,Toast.LENGTH_LONG.show(); //创建上载对象以存储上载的图像详细信息 Upload Upload=新上载(editTextName.getText().toString().trim(),taskSnapshot.getDownloadUrl().toString()); //向firebase数据库添加上载 字符串uploadId=mDatabase.push().getKey(); mDatabase.child(uploadId).setValue(upload); } }) .addOnFailureListener(新的OnFailureListener(){ @凌驾 public void onFailure(@NonNull异常){ progressDialog.disclose(); Toast.makeText(getApplicationContext(),exception.getMessage(),Toast.LENGTH_LONG.show(); } }) .addOnProgressListener(新的OnProgressListener(){ @凌驾 public void onProgress(UploadTask.TaskSnapshot TaskSnapshot){ //显示上载进度 双进度=(100.0*taskSnapshot.GetByTestTransferred())/taskSnapshot.getTotalByteCount(); setMessage(“上传的”+((int)进度)+“%…”; } });
试试这个

 Uri uri = data.getData() ;// your image uri 
  StorageReference imagePathReference =   StorageRef.child("Your path");
                    Bitmap bmp = null;
                    try {
                        bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                    // convert bitmap to byte array to save image in firebase storage
                    ByteArrayOutputStream bos = new ByteArrayOutputStream();
                    if (bmp != null) {
                        bmp.compress(Bitmap.CompressFormat.JPEG, 60, bos);
                    }
                    byte[] dataNew = bos.toByteArray();

                    uploadTask = imagePathReference.putBytes(dataNew);
                    uploadTask.addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception exception) {
                            Log.e("firebase ", " addOnFailureListener ");
                        }
                    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                        @Override
                        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                           // u will  et download url here.
                        }
                    });
Uri=data.getData();//您的图像Uri
StorageReference imagePathReference=StorageRef.child(“您的路径”);
位图bmp=null;
试一试{
bmp=MediaStore.Images.Media.getBitmap(getContentResolver(),data.getData());
}捕获(IOE异常){
e、 printStackTrace();
}
//将位图转换为字节数组以将图像保存在firebase存储器中
ByteArrayOutputStream bos=新建ByteArrayOutputStream();
如果(bmp!=null){
bmp.compress(Bitmap.CompressFormat.JPEG,60,bos);
}
字节[]dataNew=bos.toByteArray();
uploadTask=imagePathReference.putBytes(dataNew);
uploadTask.addOnFailureListener(新的OnFailureListener(){
@凌驾
public void onFailure(@NonNull异常){
Log.e(“firebase”、“addOnFailureListener”);
}
}).addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//你将在这里下载网址。
}
});
private void uploadimage(){
progressbar.setMessage(“上传数据”);
progressbar.setCanceledOnTouchOutside(假);
progressbar.show();
字符串日期戳=新的SimpleDataFormat(“dd-MM-yyyy-HH:MM:ss:SSS”).format(新日期()).toString();
最终StorageReference imagepath=StorageReference.child(“图像”+日期戳);
imagepath.putFile(SelecteImage.addOnSuccessListener)(
新OnSuccessListener(){
@凌驾
成功时公共无效(UploadTask.TaskSnapshot TaskSnapshot){
//Toast.makeText(Dashboard.this,“成功存储图像”,Toast.LENGTH_LONG.show();
getimage=taskSnapshot.getDownloadUrl();
//bmp=((BitmapDrawable)imagepreview.getDrawable()).getBitmap();
Map imagemap=newhashmap();
put(“imageurl”,getimage);
databaseReference.child(Table_Dashboard).push().setValue(imagemap).addOnCompleteListener(新的OnCompleteListener()){
@凌驾
公共空间未完成(@否
     private void uploadimage() {
    progressbar.setMessage("Uploading Data");
    progressbar.setCanceledOnTouchOutside(false);
    progressbar.show();
    String dateStamp = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss:SSS").format(new Date()).toString();
    final StorageReference imagepath = storageReference.child("Image" + dateStamp);
    imagepath.putFile(selectedImage).addOnSuccessListener(
            new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    //Toast.makeText(Dashboard.this, "Image Stored Succesfully", Toast.LENGTH_LONG).show();

                    getimage = taskSnapshot.getDownloadUrl();
                    //  bmp = ((BitmapDrawable) imagepreview.getDrawable()).getBitmap();
                    Map<String,String> imagemap=new <String,String>HashMap();

                    imagemap.put("imageurl",getimage);

        databaseReference.child(Table_Dashboard).push().setValue(imagemap).addOnCompleteListener(new OnCompleteListener<Void>() {
                        @Override
                        public void onComplete(@NonNull Task<Void> task) {
                            if (task.isSuccessful()) {
                                imagepreview.setImageResource(R.mipmap.preview);
                                progressbar.dismiss();
                                Toast.makeText(Dashboard.this, "Image Uploaded Succesfully", Toast.LENGTH_LONG).show();
                            }

                        }
                    });
                }
            });
}