400当我尝试删除目录时,FirebaseStorage始终返回错误,例如以下内容始终返回错误400.
let storageRef = FIRStorage.storage().reference().child("path/to/directory")
storageRef.deleteWithCompletion { (error) in
print("error: \(error)") // always prints error code 400
}
Run Code Online (Sandbox Code Playgroud)
但是,删除文件工作正常,例如不会返回错误:
let storageRef = FIRStorage.storage().reference().child("path/to/file.jpg")
storageRef.deleteWithCompletion { (error) in
print("error: \(error)") // works fine, error is nil
}
Run Code Online (Sandbox Code Playgroud)
我在这里做错了什么?我不认为它不受FirebaseStorage的支持,因为从目录中逐个删除文件会非常蹩脚(特别是如果所述目录有100或1000个).
我试图添加一个进度条来上传firebase上的文件.但不幸的是,它并不表示上传进度.logcat和进度条都只显示文件何时达到100%
uploadTask.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
double progress = 100.0 * (taskSnapshot.getBytesTransferred() / taskSnapshot.getTotalByteCount());
System.out.println("Upload is " + progress + "% done");
int currentprogress = (int) progress;
progressBar.setProgress(currentprogress);
}
}).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() {
@Override
public void onPaused(UploadTask.TaskSnapshot taskSnapshot) {
System.out.println("Upload is paused");
}
});
Run Code Online (Sandbox Code Playgroud) 我在Firebase上运行了一个PWA.我的图片文件托管在Firebase存储上.我注意到我的浏览器没有为从存储系统加载的文件保存缓存.浏览器为每个页面刷新请求文件.它会导致不必要的延迟和流量.
我的JS脚本从Firebase存储的下载链接加载文件,例如:https://firebasestorage.googleapis.com/v0/b/discipulado-7b14b.appspot.com/o/book3.png?val = media&token = 65b2cde7-c8a4 -45da-a743-401759663c17.
我可以缓存这些请求吗?
UPDATE
根据这些答案,我不应该使用Firebase存储来托管我的网站上的文件.只是为了管理用户的下载和上传.它是否正确?
我们是否可以使用Firestore数据授予或限制对Firebase Cloud Storage上托管的文件的访问权限?
我希望用作Firebase安全规则的例子
allow write: if get(/databases/mydbname/documents/guilds/$(guildID)).data.users[(request.auth.uid)] in ["Admin", "Member"];
Run Code Online (Sandbox Code Playgroud) firebase firebase-security firebase-storage google-cloud-firestore
在 flutter web 上,我从计算机中选择一个图像文件并获取一个 File 图像对象。然后我想将它上传到 Firebase 存储。对于 Android 和 iOS 版本的应用程序,我使用了 Firebase Cloud Function 和 http 多部分请求。它有效,但对于该应用程序的网络版本则无效。所以,
如何直接或通过 Cloud Functions 将 html 图像文件上传到 Firebase 存储?
file-upload image-upload google-cloud-functions firebase-storage flutter-web
我正在使用文件选择器插件从设备中选择文件。该文件是在 PlatformFile 的数据类型中选择的,但我想将该文件发送到 Firebase Storage,并且我需要一个常规文件。如何将 PlatformFile 转换为文件以便将其发送到 Firebase Storage?这是代码:
PlatformFile pdf;
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
void _trySubmit() async {
final isValid = _formKey.currentState.validate();
if (isValid) {
_formKey.currentState.save();
final ref = FirebaseStorage.instance
.ref()
.child('article_pdf')
.child(title + '-' + author + '.pdf');
await ref.putFile(pdf).onComplete; // This throws an error saying that The argument type 'PlatformFile' can't be assigned to the parameter type 'File'
}
}
void _pickFile() async {
FilePickerResult result = await FilePicker.platform.pickFiles(
type: FileType.custom,
allowedExtensions: ['pdf'],
);
if (result …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)
错误文件不存在.有任何想法吗?
当使用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-storage ×10
firebase ×8
android ×2
javascript ×2
swift ×2
caching ×1
file-upload ×1
filepicker ×1
flutter ×1
flutter-web ×1
image-upload ×1
ios ×1
java ×1
json ×1
picasso ×1