我正在努力获取Firebase存储桶中文件的"长期持久下载链接".我已将此权限更改为
service firebase.storage {
match /b/project-xxx.appspot.com/o {
match /{allPaths=**} {
allow read, write;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的javacode看起来像这样:
private String niceLink (String date){
String link;
// Points to the root reference
StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference dateRef = storageRef.child("/" + date+ ".csv");
link = dateRef.getDownloadUrl().toString();
return link;
}
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到的uri链接看起来像 com.google.android.gms.tasks.zzh@xxx
问题1.我可以从此获得类似的下载链接:https://firebasestorage.googleapis.com/v0/b/project-xxxx.appspot.com/o/20-5-2016.csv?val = media&token = b5d45a7f-3ab7-4f9b-b661-3a2187adxxxx
当我尝试获取上面的链接时,我在返回之前更改了最后一行,如下所示:
private String niceLink (String date){
String link;
// Points to the root reference
StorageReference storageRef = FirebaseStorage.getInstance().getReference();
StorageReference dateRef = storageRef.child("/" …Run Code Online (Sandbox Code Playgroud) 我可以轻松删除子引用中的文件,但是如何从Firebase存储中删除整个文件夹?
let postRef = FIRStorage.storage().reference().child("posts/folderName")
postRef.deleteWithCompletion { (error) in
print(error)
}
Run Code Online (Sandbox Code Playgroud)
错误文件不存在.有任何想法吗?
我正在尝试了解令牌如何在Firebase存储中运行.
每当我的网络应用程序将图像上传到FS时,它都会向其公共网址添加一个令牌.问题是每当您将相同的图像文件上传到Web应用程序的另一部分时,您似乎没有获得另一个文件,而是已经上传的文件URL的不同令牌,因此呈现前一个403错误注册图像显示.
有办法解决这个问题吗?
例:
storageRef.put(picture.jpg);
uploadTask.snapshot.downloadURL
// returns something like https://firebasestorage.googleapis.com/v0/b/<your-app>/o/picture.jpg?alt=media&token=09cb2927-4706-4e36-95ae-2515c68b0d6e
Run Code Online (Sandbox Code Playgroud)
那个url然后显示在img src中的某个地方.
<img src="https://firebasestorage.googleapis.com/v0/b/<your-app>/o/picture.jpg?alt=media&token=09cb2927-4706-4e36-95ae-2515c68b0d6e">
Run Code Online (Sandbox Code Playgroud)
如果用户重复该过程并在应用的另一部分上传相同的picture.jpg,而不是在Firebase存储中获取全新副本,则该文件将被以新标记结尾的URL覆盖; 说12345.
所以:
<img src="https://...picture.jpg?alt=media&token=12345"> // New upload renders fine
<img src="https://...picture.jpg?alt=media&token=09cb2927-4706..."> // But old upload breaks because of wrong url
Run Code Online (Sandbox Code Playgroud) 我有从Firebase存储下载文件的基本工作代码.
String key = "gs://.../test.jpg";
File file = new File(getCacheDir() + File.separator + "test.jpg");
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference gsRef = storage.getReferenceFromUrl(key);
gsRef.getFile(file)
.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>()
{
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot)
{
Log.d("APP", "onSuccess");
}
}).addOnFailureListener(new OnFailureListener()
{
@Override
public void onFailure(@NonNull Exception exception)
{
Log.d("APP", "onFailure: ", exception);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,如果在设备未连接到Internet时执行上述代码,则onFailure最终触发事件前需要大约10分钟.在此期间,日志填满了重复的重试:
02-27 21:41:07.203 12954-13288/com.example.test E/StorageUtil: error getting token java.util.concurrent.ExecutionException: com.google.firebase.FirebaseException: An internal error has occurred. [ <<Network Error>> ]
02-27 21:41:08.244 12954-13288/com.example.test W/ExponenentialBackoff: network unavailable, sleeping.
02-27 …Run Code Online (Sandbox Code Playgroud) 当使用FirebaseStorage的getDownloadUrl时,我对url(&token =)中的"token"有疑问.
从文档中可以看出,它返回了一个"长期存在"的下载网址 https://firebase.google.com/docs/reference/js/firebase.storage.Reference#getDownloadURL
问题是,我将fireUrl保存在FirebaseDatabase中
-chatroom
- c1
- m1
-message: "Sent a photo"
-photoUrl: downloadUrl here
Run Code Online (Sandbox Code Playgroud)
根据我的理解,它不是终身令牌,所以在某个时间点,令牌将无效.因此,当我在ImageView中显示此URL时,它将不会加载图像.
Picasso.with(context)
.load(downloadUrl)
.into(imageView)
Run Code Online (Sandbox Code Playgroud)
我明白我可以在firebase中使用这样的东西来生成一个新的.
StorageReference sr = getReferenceFromUrl(downloadUrl)
//pseudo-code
sr.getDownloadUrl().addOnSuccessListener((Uri newUri) => {
Picasso.with(context)
.load(newUri)
.into(imageView)
});
Run Code Online (Sandbox Code Playgroud)
但!此过程总是会在此过程中获得新的下载URL.
那么,令牌会持续多久?此外,如果它不是生命周期令牌,我们应该如何正确存储下载URL?
在运行时onStart()方法上尝试Picasso时,它通常使用控制台的下载链接从Firebase加载图像.
但是当我尝试在StorageReference onSuccess方法中加载图像时,它就无法工作.
这个类正在扩展片段:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == GALLERY_IN && resultCode == Activity.RESULT_OK) {
isGranted = true;
String path = FireStorage.retUID() + "/";
showIndProgress();
Uri uri = data.getData();
StorageReference childPathRef = FireStorage.storageRef.child(path + uri.getLastPathSegment());
childPathRef.putFile(uri)
.addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
if(task.isSuccessful()) {
Picasso.with(mContext).load(task.getResult().getDownloadUrl())
.into(profView);
Picasso.Builder build = new Picasso.Builder(mContext);
build.listener(new Picasso.Listener() {
@Override
public void onImageLoadFailed(Picasso picasso, Uri uri, Exception …Run Code Online (Sandbox Code Playgroud) 我试图在firebase存储上传文件(图像).但它控制了一个错误,说"未捕获的错误:Firebase选项中没有定义存储桶"..这是我的代码
const fileUpBtn = document.getElementById('photoUpload');
const selectFile = document.getElementById('selectedFile');
const postIt = document.getElementById('postIt');
fileUpBtn.addEventListener('click',function(){
selectFile.click();
}
);
selectFile.addEventListener('change',function(e){
var file=e.target.files[0];
var filename = file.name;
console.log('/postPic/'+filename);
var storeLocation = storage.ref('/postPic/'+filename);
var uploadTask=storeLocation.put(file);
});
Run Code Online (Sandbox Code Playgroud)
我尝试允许任何用户存储,但这种情况也控制了这个错误.

我正在尝试将单个图像上传到Firebase存储,然后获取其下载URL并将其分配给变量.
我可以成功将我的图像上传到firebase,但是我无法检索下载网址.这是我已经尝试过的.
upload() {
let storageRef = firebase.storage().ref();
let success = false;
for (let selectedFile of [(<HTMLInputElement>document.getElementById('file')).files[0]]) {
let router = this.router;
let af = this.af;
let folder = this.folder;
let path = `/${this.folder}/${selectedFile.name}`;
var iRef = storageRef.child(path);
iRef.put(selectedFile).then((snapshot) => {
console.log('Uploaded a blob or file! Now storing the reference at', `/${this.folder}/images/`);
af.list(`/${folder}/images/`).push({ path: path, filename: selectedFile.name })
});
}
// This part does not work
iRef.getDownloadURL().then((url) => {this.image = url});
console.log('IREF IS ' + iRef)
console.log('IMAGEURL IS ' + …Run Code Online (Sandbox Code Playgroud) javascript firebase firebase-realtime-database firebase-storage angular
我正在尝试上传图片,同样的过程适用于我的其他应用程序,但在这里它给出了这些错误,你们能帮忙吗?
Future getImage1() async {
// ignore: deprecated_member_use
var firstImage = await ImagePicker.pickImage(
source: ImageSource.gallery, imageQuality: 65);
setState(() {
_image1 = firstImage;
});
}
Run Code Online (Sandbox Code Playgroud)
firebase ×10
firebase-storage ×10
android ×4
javascript ×3
java ×2
angular ×1
dart ×1
flutter ×1
picasso ×1
swift ×1