Firebase SignedURL 不等于下载 url 存储

Firebase SignedURL not equal to download url Storage

我之前问过一个从 Firebase 存储下载URL 的问题,给我的答案是:

bucket.file(filename).getSignedUrl({
  action: 'read',
  expires: '03-17-2025'
}, function(err, url) {
  if (err) {
    console.error(err);
    return;
  }

  // The file is now available to read from this URL.
  request(url, function(err, resp) {
    // resp.statusCode = 200
  });
});

当我使用它通过 Glide 下载图像或使用 ExoPlayer 重新制作音频或视频文件时,前面的代码给出的代码不起作用。

然而,当上传文件时,我得到的 URL 与 Firebase 存储(它确实适用于 Glide 和 ExoPlayer)给出的完全不同:

https://firebasestorage.googleapis.com/v0/b/project-PROYECT_NUMBER.appspot.com/o/Messages%2Fimages%2F-KUj4wvXXl6aj9XXXX%2F1493147111111?alt=media&token=TOKEN

我怎样才能像在服务器端使用 Android 或 iOS SDK 那样获得正确的 downloadUrl?

我希望你只通过应用程序上传图片吗?上传后,您将取回下载 link。我希望这能帮助你。

import com.google.firebase.storage.StorageTask;

 final StorageTask uploadTask = uplodedFileRef.putBytes(data);
    Log.d(TAG, "uploadFilefromPath: " + uplodedFileRef.getPath().toString());
uploadTask.addOnFailureListener(new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception exception) {
                    // Handle unsuccessful uploads
                    Toast.makeText(acty, "Upload Failed", Toast.LENGTH_SHORT).show();
                    dialog.dismiss();
                    sendResult(false, Uri.EMPTY);
                }
            })
            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                    // taskSnapshot.getMetadata() contains file metadata such as size, content-type, and download URL.
                    Toast.makeText(acty, "Upload Successful", Toast.LENGTH_SHORT).show();
                    dialog.dismiss();
                    sendResult(true, taskSnapshot.getDownloadUrl());
                }
            })
            .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                @Override
                public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {

                    int bytesTransferred = (int) taskSnapshot.getBytesTransferred();
                    int totalBytes = (int) taskSnapshot.getTotalByteCount();
                    int progress = (100 * bytesTransferred) / totalBytes;

                    Log.v(TAG, "Bytes transferred: " + taskSnapshot.getBytesTransferred());
                    Log.v(TAG, "TotalBytes: " + totalBytes);
                    Log.v(TAG, "Upload is: " + progress + "% done");

                    dialog.setContent("Upload in Progress");
                    dialog.getProgressBar().setIndeterminate(false);
                    // double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                    dialog.getProgressBar().setMax(totalBytes / 1024);
                    dialog.setMaxProgress(totalBytes / 1024);
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                        dialog.getProgressBar().setProgress(bytesTransferred / 1024, true);
                        dialog.setProgress(bytesTransferred / 1024);
                    } else
                        dialog.getProgressBar().setProgress(bytesTransferred / 1024);
                    dialog.setProgress(bytesTransferred / 1024);
                    // dialog.getProgressBar().setProgress((int) progress);
                }
            });
addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
      @Override
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { //success
            sendResult(true, taskSnapshot.getDownloadUrl());
      }
})

在此 taskSnapshot.getDownloadUrl() 中,您将收到下载 url 然后将其保存在 firebase 数据库中,您可以在

时检索

无法像使用 Android、iOS 或 Javascript SDK 那样在服务器端下载 url。您必须通过调用 getSignedUrl() 来生成 url。

您可能想检查您是否有权在给定 URL 处读取文件。

默认情况下,您必须经过身份验证。

在 firebase 控制台中检查您的存储规则

https://firebase.google.com/docs/storage/security/#authorization