2017-04-25 89 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(名稱)是我分配給圖像的用戶的名稱,以便我可以指定哪個圖像屬於哪個用戶,但是如果您不需要它,您可以將其刪除。 –

相關問題