2017-08-31 36 views
1

我上传图片到Firebase时出现问题。Android Tasksnapshot getDownloadUrl()不同的令牌

当我上传图片时,我得到一个taskSnapshot.getDownloadUrl()标记,当我查看firebase存储时,存在一个不同的标记密钥。我无法弄清楚我的问题在哪里,并不是每次出现错误(大约30%的时间)。

希望你能帮助我。

我的上传方法:

public void uploadImage(Context context, Activity activity) { 
    String authorities = activity.getPackageName() + ".fileprovider"; 
    File f = new File(MainActivity.imagesPath + String.valueOf(uploadToiletId) + "_" + uploadTimeStamp + ".png"); 
    Log.i("HANDLERTAG", "file: " + f.getPath()); 
    Uri imageUri = FileProvider.getUriForFile(context, authorities, f); 
    Log.i("HANDLERTAG", "image: " + imageUri.getPath()); 
    Bitmap bitmap; 
    ByteArrayOutputStream baos; 
    final DatabaseReference databaseRef = FirebaseDatabase.getInstance().getReference(); 
    final StorageReference storageRef = FirebaseStorage.getInstance().getReference(); 
    final FirebaseAuth mAuth = FirebaseAuth.getInstance(); 
    try { 

     bitmap = MediaStore.Images.Media.getBitmap(context.getContentResolver(), imageUri); 
     Bitmap resized = Bitmap.createScaledBitmap(bitmap, bitmap.getWidth()/4, bitmap.getHeight()/ 4, true); 
     baos = new ByteArrayOutputStream(); 
     resized.compress(Bitmap.CompressFormat.PNG, 50, baos); 
     byte[] dataBAOS = baos.toByteArray(); 
     final String timeStamp = FormatHelper.getCurrentDateTimeString("dd-MM-yy HH:mm:ss"); 
     StorageReference imagesRef = storageRef.child(String.valueOf(uploadToiletId)).child(timeStamp + ".png"); 
     imagesRef.putBytes(dataBAOS).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       Log.i("CAMERATAG", "Billede uploadet"); 
       Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
       Log.i("DOWNLOAD_URL",String.valueOf(downloadUrl)); 
       HashMap<String, String> UploadImageMap = new HashMap<>(); 
       UploadImageMap.put("Url", downloadUrl.toString()); 
       UploadImageMap.put("UserId", mAuth.getCurrentUser().getUid()); 
       databaseRef.child(DB_TABLE_TOILETS) 
         .child(String.valueOf(uploadToiletId)) 
         .child("Images") 
         .child(timeStamp).setValue(UploadImageMap); 
       databaseRef.child(DB_TABLE_USERS) 
         .child(mAuth.getCurrentUser().getUid()) 
         .child("Images") 
         .child(String.valueOf(uploadToiletId)) 
         .child(timeStamp).setValue(UploadImageMap); 
      } 
     }); 
     imagesRef.putBytes(dataBAOS).addOnFailureListener(new OnFailureListener() { 
      @Override 
      public void onFailure(@NonNull Exception e) { 
       Log.i("CAMERATAG", e.getLocalizedMessage()); 
       Log.i("CAMERATAG", "Noget gik galt med billede"); 
      } 
     }); 
     Toast.makeText(context, "Upload complete", Toast.LENGTH_SHORT).show(); 
    } catch (IOException e) { 
     Log.i("HANDLERTAG", e.getMessage()); 
     e.printStackTrace(); 
    } 
} 

Debug shows token key from my app in android studio

令牌密钥:标记= b23e8ab1-8322-46cf-889e-4f276fb2c242

Token from firebase

从火力

令牌密钥: token = e5b84bed-7226-4af3-b01b-e31cf03e7d8b

+0

什么是错误? – rckrd

+0

有没有错误,我只是得到不同的令牌,我认为这是一个过时的密钥,得到的上传,我真的不知道为什么。 –

+0

您是否从Firebase控制台生成了下载网址? – rckrd

回答

3

您是否尝试将存储设置为true?

service firebase.storage { 
    match /b/{bucket}/o { 
    match /{allPaths=**} { 
     allow read; 
     allow write: if request.auth != null; 
    } 
    } 
} 

这样用户可以在没有登录的情况下阅读,但必须先登录才能真正写入存储。

+1

谢谢你解决了这个问题。 –