2017-04-25 41 views
3

从来就问了一个问题,以前从火力地堡的存储,这是给我的答案得到将downloadURL是:火力地堡SignedURL不等于下载地址存储

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比由火力地堡存储给出的,(至极做工作滑翔和ExoPlayer)当一个文件被上传至极看起来是这样的:

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

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

回答

2

有没有办法让服务器端的下载网址就像使用Android,iOS或Javascript SDK一样。你必须通过调用getSignedUrl()来生成一个url。

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

默认情况下,您必须进行身份验证。

检查存储空间的规则在火力控制台

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

1

我希望你上传的图像通过应用程序只有呐?一旦上传,你将获得下载链接。我希望这会帮助你。

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); 
       } 
      }); 
+0

的问题是,我在做,我想通过服务器 – Andrea

+0

看到我添加了一些答案看看它@Andrea – Techgeek

+0

我检索网址很抱歉,但答案并不符合我所要求的内容,我需要在Firebase函数节点代码 – Andrea

1
addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { //success 
      sendResult(true, taskSnapshot.getDownloadUrl()); 
     } 
}) 

在这个taskSnapshot.getDownloadUrl()您将收到下载链接,然后将其保存火力数据库可以能够检索作为当

+0

我很抱歉,答案并不符合我所要求的内容,因此我需要在Firebase函数节点代码 – Andrea

+0

中检索该URL。使用上述方法,您应该将下载URL存储在节点中,然后从该节点访问该节点您的Firebase功能。 –