【问题标题】:How to check the filetype of an uploaded file on Cloud Storage for Firebase?如何在 Cloud Storage for Firebase 上检查上传文件的文件类型?
【发布时间】:2021-04-04 11:57:44
【问题描述】:

我的应用中有一个简单的文件上传系统,可以将 .mp3 文件上传到 firebase。我想检查以确保上传的文件绝对是.mp3 文件,并且不大于 80MB。有没有办法做到这一点?

这是我目前上传文件的代码:

private void getMixForUpload() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("mp3/*");

    Intent chooser = Intent.createChooser(intent, "Choose Your Mix");
    startActivityForResult(chooser, ACTION_REQUEST_GALLERY);

}

@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    if (requestCode == ACTION_REQUEST_GALLERY && resultCode == RESULT_OK) {
        Uri uri = data.getData();

        StorageReference filepath = FirebaseStorage.getInstance().getReference().child("DjMixes").child(uri.getLastPathSegment());
        filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
            @Override
            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


                taskSnapshot.getMetadata().getReference().getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                    @Override
                    public void onSuccess(Uri uri) {
                        Uri downloadUrl = uri;


                        firebaselogourl = downloadUrl.toString();

                    }
                });
            }

        }); 
}

【问题讨论】:

标签: java android firebase firebase-storage


【解决方案1】:

所以,基本上,你必须使用File Metadata。考虑到您获得了正确的参考并且上传过程的所有内容都是正确的,以下是做您想做的事情的方法:

taskSnapshot.getMetadata().addOnSuccessListener(new OnSuccessListener<StorageMetadata>() {
    @Override
    public void onSuccess(StorageMetadata storageMetadata) {
        long sizeMB = storageMetadata.getSizeBytes() / (1024 * 1024);
        String fileType = storageMetadata.getContentType();
    }
}).addOnFailureListener(new OnFailureListener() {
    @Override
    public void onFailure(@NonNull Exception exception) {
        // Handle your error, something bad happened :( 
    }
});

现在您已经有了大小(以兆字节为单位)和内容类型,您可以像这样使用if 语句:

if (fileType.matches("audio/mpeg")  && sizeMB < 80)) {
   //your file is a audio file congratulations
   //your file also is bellow 80mb, good :)
} else {
   //the above statement is not true
}

正如 OP 指出的那样,最好使用 .matches() 函数,在这种情况下,它是唯一有效的函数。

注意:如果您打算从 Firebase 存储中删除文件以防文件大于 80MB 或不是mp3 文件,我建议您在上传文件之前执行这些操作。基本上,检查您的文件是否为mp3 并且小于80MB,然后上传。它改善了程序的流程,坦率地说,无论如何,它是一种更好的方法。

【讨论】:

  • 昨天很忙,抱歉标记延迟
  • @markharrop 当然,无需道歉。只是问我的解决方案是否有效。快乐编码:)
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 2017-05-09
  • 2022-10-08
  • 2021-03-19
  • 1970-01-01
  • 2010-09-23
  • 2021-12-07
  • 1970-01-01
相关资源
最近更新 更多