2017-04-25 53 views
0

这是我的代码(在GitHub上检查此文件full code),以将图片上传到Firebase存储。无法在Firebase存储中上传图片

// ImagePickerButton shows an image picker to upload a image for a message 
    mPhotoPickerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent i = new Intent(); 
      i.setType("image/*"); 
      i.setAction(Intent.ACTION_GET_CONTENT); 
      i.putExtra(Intent.EXTRA_LOCAL_ONLY, true); 
      startActivityForResult(Intent.createChooser(i, "Complete action using"), RC_PHOTO_PICKER); 
     } 
    }); 

这是OnActivityResult方法:

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK) { 

     Uri selectedImageUri = data.getData(); 

     //get the reference to stored file at database 
     StorageReference selectedImageFilePath = mStorageReference.child(selectedImageUri.getLastPathSegment()); 

     //upload file to firebase 
     selectedImageFilePath.putFile(selectedImageUri).addOnSuccessListener(MainActivity.this, new OnSuccessListener <UploadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
      @SuppressWarnings("VisibleForTests") 
      String downloadUrl = taskSnapshot.getDownloadUrl().toString(); 
      Message message = new Message(null, userName, downloadUrl); 
      messagesDatabaseReference.push().setValue(message); 
     } 
     }); 
    } 
    } 
} 

从画廊挑选一Image工作正常,但我无法上传所选的图片上火力地堡存储。纠正我的代码如果我在任何网站都错了。

+0

它算吗?因为,默认情况下Firebase会与Internet权限一起运行吗? @PatrixWilliams – Chip

回答

0

代替else if声明,我通过编写单独的if声明对其进行了修改。

if (requestCode == RC_SIGN_IN) { 
    if (resultCode == RESULT_OK) { 

    }else if (resultCode == RESULT_CANCELED) { 

    } 

    // This was the change I made 
    if (requestCode == RC_PHOTO_PICKER && resultCode == RESULT_OK) { 

    } 
} 
0

data.getData()会返回一个URI,做 - 不过,我手动在我manifest文件

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

我目前正在运行的通过USB连接在自己的移动设备应用程序(牛轧糖摩托G4)进入这些线路不指向一个文件。

您应该使用 InputStream is = getContentResolver().openInputStream(data.getData()) 比使用 selectedImageFilePath.putStream(is)

你也可以一个onFailureListener添加到上传任务和调试什么错误。

此外,如果我正确记得,当您直接读取onActivityResult中的数据时,我认为您不需要存储权限。

+0

它给我FileNotFoundException。更重要的是,它不工作! – Chip

+0

@PC你可以分享LogCat吗? – Brianvdb

+0

@PC也可以在GitHub上查看你的代码。文件上传部分永远无法到达,因为requestCode从不是2.检查你是否嵌套。 – Brianvdb

0

尝试此按钮点击:

//Select Image functionality 
    btnselectImage.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(Intent.ACTION_PICK); 
      intent.setType("image/*"); 
      startActivityForResult(intent, 2); 
     } 
    }); 

对于保存图像火基地:

//Storing and getting image from firebase 
@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == GALLERY_INTENT && resultCode == RESULT_OK){ 

     final Uri uri = data.getData(); 

     StorageReference filepath = mStorageRef.child("Photos").child(name); 
     filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 

      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

       Uri downloadUri = taskSnapshot.getDownloadUrl(); 
       //Getting url where image is stored 
       saveImage(downloadUri); 
       Picasso.with(getActivity()).load(downloadUri).fit().centerCrop().into(profileImage); 
      } 
     }); 
    } 

这对我工作得很好,希望这会有所帮助。

+0

'.child(name)'代表什么? – Chip

+0

.child(名称)是我分配给图像的用户的名称,以便我可以指定哪个图像属于哪个用户,但是如果您不需要它,您可以将其删除。 –

相关问题