使用下面的代码,我可以看到上传到我的firebase存储帐户的文件没有经过身份验证,但其他人无法上传。
UploadFileAsync upload_task;
for(int i=0; i<Files.size(); i++)
{
upload_task=new UploadFileAsync(getApplicationContext());
upload_task.filePath=Files.get(i);
upload_task.execute();
count++;
}
public class UploadFileAsync extends AsyncTask<String, Void, Boolean> {
public String filePath;
public boolean isUploaded=false;
double progress;
public Context context;
private StorageReference storageReference;
boolean res = false;
//this method will upload the file
private boolean uploadFile(final Context context, final String filePath) {
//if there is a file to upload
if (filePath != null) {
//getting firebase storage reference
storageReference = FirebaseStorage.getInstance().getReference();
StorageReference riversRef = storageReference.child(filePath);
riversRef.putFile(Uri.fromFile(new File(fileName)))
.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
//if the upload is successfull
isUploaded=true;
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
//if the upload is not successfull
isUploaded=false;
}
})
.addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
//calculating progress percentage
progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
Log.e("Progress"+fileName,""+progress);
});
}
//if there is not any file
else {
//you can display an error toast
}
return isUploaded;
}
public UploadFileAsync (Context context){
this.context = context;
this.isUploaded=false;
}
@Override
protected Boolean doInBackground(String... params) {
isUploaded = uploadFile(this.context, filePath);
return isUploaded;
}
@Override
protected void onPostExecute(Boolean result) {
}
@Override
protected void onPreExecute() {
}
@Override
protected void onProgressUpdate(Void... values) {
}
}
即使我在AsyncTask之外调用upload函数,我也会收到此错误:
StorageUtil:获取令牌的错误java.util.concurrent.ExecutionException:com.google.android.gms.internal.zzbqn:请在尝试获取令牌之前登录。
答案 0 :(得分:1)
要使用Cloud Storage for Firebase,您需要:
要启用身份验证,follow the instructions in the docs;否则,您可以按照security rules docs并在开发过程中将规则设置为公共访问权限:
service firebase.storage {
match /b/{bucket}/o {
match /{allObjects=**} {
// public read, write access!
// don't use this in production!!!
allow read, write;
}
}
}
答案 1 :(得分:0)
如果您确实想要在没有身份验证的情况下以第三方成员身份访问您的数据库
你可以这样做
1.转到控制台
2.然后转到实时数据库部分
3.然后切换到realtine数据库中的rules选项卡,在那里您将找到一些读写规则
4.使它成为read = true, write = true
5保存..它会给你一个警告,因为这是一个不好的做法
6.现在任何人都可以访问您的数据库而无需身份验证