2016-07-14 4 views
2

Я пытаюсь загрузить изображение через локальный файл.Ошибка Android FireBase при загрузке картинки

UploadTask uploadTask = currentPicRef.putFile(file, metadata); 

Когда изображение пользовательского Пика из галереи или съемки с помощью камеры изображение сохраняется во внешнем хранилище, и я сохранить Ури в общей предпочтительности.

я успешно загрузил изображение в ImageView с использованием метода setImageURI(uri), но когда я называю firebase метод и используя тот же URI (Uri file = Uri.fromFile(new File(fileName));)
Я получаю ошибку

не удалось найти файл для загрузки : файл: /// содержание% 3A/СМИ/внешние/изображения/СМИ/22943

, но когда я использую журнал, чтобы проверить локальный файл я получаю

Ури содержание: // СМИ/внешние/изображения/СМИ/22943

Стоит также отметить, что, когда я использовал uri.parse() в firebase вместо uri.fromFile() загрузить из локального файла он загружен метаданные, но не сама фотография.

Любые идеи, как исправить это?

ответ

2

Может быть, это немного поздно, так или иначе:

не удалось найти файл для загрузки: Файл: /// содержание% 3A/СМИ/внешний/изображения/СМИ/22943

I думаю, у вас может возникнуть проблема кодирования url (см. % 3A в файле uri).

Попробуйте декодировать uri Uri file = Uri.fromFile(new File(fileName));, прежде чем передавать его в Справочник по хранилищу Firebase.

Если это не сработает, вместо этого, чтобы получить изображение uri таким образом Uri.fromFile(new File(fileName)), вы можете попытаться сохранить локальный путь изображения в общих настройках (я предполагаю, что когда вы получите изображение из галереи или камеры, вы может также иметь локальный путь), и использовать это для загрузки изображения в хранилище Firebase.

Надежда может помочь.

0

fileName можно определить fileUri.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]