2017-08-19 9 views
0

クラスにFirebaseDatabaseリファレンスとFirebaseStorageリファレンスが1つあります。 最初のStorageReferenceはProductImagesであり、2番目の参照はDatabaseReferenceから取得するプッシュキーです。 しかし、問題は、ストレージにイメージをアップロードするときに、2番目の参照が作成されないということです。すべてのイメージはProductImagesリファレンスに保存されています。 私のコードに欠陥はありますか? これはFirebaseの制限ですか? また、Firebase Storageにプログラムでネストされたフォルダを作成する方法はありますか?firebaseのストレージにネストされたフォルダを作成する

私は、コードを添付しました:

private DatabaseReference productRef; 
private StorageReference productImagesRef, imageRef; 

productRef = FirebaseDatabase.getInstance.getReference().child("Products"); 
productImagesRef = FirebaseStorage.getInstance().getReference().child("ProductImages"); 

final String key = productRef.push().getKey(); 
imageRef = FirebaseStorage.getInstance().getReference().child("ProductImages").child(key); 

imageRef.putFile(mainImageUri) 
      .addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception exception) { 
        // Handle unsuccessful uploads 
        progressDialog.dismiss(); 
        Toast.makeText(getActivity(), "Failed to upload!!! Try Again...", Toast.LENGTH_SHORT).show(); 
        return; 
       } 
      }) 
      .addOnSuccessListener(getActivity(), new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        // When the image has successfully uploaded, we get its download URL 
        mainImageUrl = taskSnapshot.getDownloadUrl(); 
       } 
      }); 

    imageRef.putFile(sideImageOneUri) 
      .addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception exception) { 
        // Handle unsuccessful uploads 
        progressDialog.dismiss(); 
        Toast.makeText(getActivity(), "Failed to upload!!! Try Again...", Toast.LENGTH_SHORT).show(); 
        return; 
       } 
      }) 
      .addOnSuccessListener(getActivity(), new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
        // When the image has successfully uploaded, we get its download URL 
        sideImageOneUrl = taskSnapshot.getDownloadUrl(); 
       } 
      }); 
+0

プッシュIDの文字が問題を引き起こしているのだろうかと思います。ハードコードされた名前で試してみることはできますか?例えば。 –

+0

@Amritあなたが作りたい入れ子のフォルダのタイプを教えてください。 –

+0

@FrankvanPuffelen私はあなたの方法を試しましたが、結果は同じです。同じことがあなたのコードと私のコードで起こっています。 1つのイメージのみがストレージに保存され、 "SubFolder"という名前の新しいフォルダを作成する代わりに、イメージの名前は "SubFolder.jpeg" – Amrit

答えて

0

はこれを試してみてください:

productImagesRef.child(key).putFile(mainImageUri)..... 
productRef.child(key).putFile(sideImageOneUri).... 

は、これが役立つことを願っています。

+0

同じストレージ参照を作成しませんでした。質問をよくお読みください。最初の参照は次のとおりです:FirebaseStorage.getInstance()。getReference()。child( "ProductImages"); ...........と2番目の参照は:FirebaseStorage.getInstance()。getReference()。child( "ProductImages")。子(キー); ..........異なる。 – Amrit

+0

申し訳ありません、親切に私の新しい提案を確認してください。 – pastillas

0

申し訳ありませんが、私は受け入れられる答えがあると思います。私は、保存しているさまざまな画像のための異なる参照を作成しました。コードは次のとおりです:

private DatabaseReference productRef; 
private StorageReference productImagesRef, imageRef, mainImgRef, sideImgRef; 

productRef = FirebaseDatabase.getInstance.getReference().child("Products"); 
productImagesRef = FirebaseStorage.getInstance().getReference().child("ProductImages"); 

final String key = productRef.push().getKey(); 
imageRef = FirebaseStorage.getInstance().getReference().child("ProductImages").child(key); 

mainImgRef = imageRef.child(mainImageUri.getLastPathSegment()); 
sideImgRef = imageRef.child(sideImageOneUri.getLastPathSegment()); 


mainImgRef.putFile(mainImageUri) 
     .addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle unsuccessful uploads 
       progressDialog.dismiss(); 
       Toast.makeText(getActivity(), "Failed to upload!!! Try Again...", Toast.LENGTH_SHORT).show(); 
       return; 
      } 
     }) 
     .addOnSuccessListener(getActivity(), new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       // When the image has successfully uploaded, we get its download URL 
       mainImageUrl = taskSnapshot.getDownloadUrl(); 
      } 
     }); 

sideImgRef.putFile(sideImageOneUri) 
     .addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception exception) { 
       // Handle unsuccessful uploads 
       progressDialog.dismiss(); 
       Toast.makeText(getActivity(), "Failed to upload!!! Try Again...", Toast.LENGTH_SHORT).show(); 
       return; 
      } 
     }) 
     .addOnSuccessListener(getActivity(), new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       // When the image has successfully uploaded, we get its download URL 
       sideImageOneUrl = taskSnapshot.getDownloadUrl(); 
      } 
     }); 
関連する問題