我正在构建Android应用,目前正在整合Google Firebase。我已经建立了一个数据库。由于我的应用会通过Google Firebase存储下载敏感图片,因此只有授权用户才能访问这些图片。在Firebase数据库中,我手动添加了存储中图像的URL(我本来希望自动执行此操作,但我不知道如何操作)。
让不同用户访问Firebase存储中不同图形的最佳方法是什么?
谢谢!
编辑:我已经读过:Google Firebase但是用难以猜测的名字重命名图像,似乎不是最安全的解决方案
答案 0 :(得分:0)
用户是通过应用上传图片还是您? 如果是这样我可以建议:
拥有私人图片按钮。
onCreate()中的
imageButton = (ImageButton) findViewById(R.id.ibImageSelect);
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent galleryIntent = new Intent(Intent.ACTION_GET_CONTENT);
galleryIntent.setType("image/*");
startActivityForResult(galleryIntent, Gallery_Request);
}
});
在方法体外:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Gallery_Request && resultCode == RESULT_OK) {
imageUri = data.getData();
imageButton.setImageURI(imageUri);
}
}
点击按钮
StorageReference upload = storageReference.child("what you want");
Bitmap bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
byte[] data = baos.toByteArray();
UploadTask filePath = upload.child(imageUri.getLastPathSegment()).putBytes(data);
filePath.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
filePath.addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
DatabaseReference newPost = mref.push(); //this generates a random unique key
replace with your own if you want, since you already got your own structure
newPost.child("image").setValue(imageUri.getLastPathSegment());
//set image name so can use this to download the image
}
});
你可以拥有&#34;状态&#34;数据的每个节点中的子节点,然后在下载循环遍历所有节点的图像时,检查状态是否是您想要的状态。然后获取图像下载密钥。
下载图片:
循环遍历节点和子节点,获取img url,
String ref = "image folder in firebase storage/" + imgurl;
storageRef.child(ref).getBytes(Long.MAX_VALUE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
// Use the bytes to display the image
final Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
ImageView iv = (ImageView) findViewByID(R.id...);
iv.setImageBitmap(bitmap);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Log.i("error", exception.getMessage());
}
});