使用 url 从 firebase 下载图像到外部 sd 卡
Download image from firebase to external sd Card using url
我已经在我的 firebase 中上传了图像文件。我已将 url 存储到 firebase 数据库。在存储过程中,为了得到 url 我使用了 Uri downloadUri = taskSnapshot.getDownloadUrl();
现在我想在单击按钮时从 url 下载该图像文件,并希望将该图像文件存储到 SD 卡的特定文件夹中,比如 "New Folder"
帮我写下面的代码....
FirebaseStorage mFirebaseStorage;
StorageReference httpsReference;
mFirebaseStorage = FirebaseStorage.getInstance();
httpsReference = mFirebaseStorage.getReferenceFromUrl(downloadUri);
Button b = findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//what??
}
});
您需要实施 FileDownloadTask; see this example.
Environment.getExternalStorageDirectory()
是SD卡,可能需要申请权限android.permission.READ_EXTERNAL_STORAGE
才能访问该路径。例如。 https://developer.android.com/training/data-storage/files.html
首先像这样创建数据库引用和文件
StorageReference downloadRef = FirebaseStorage.getInstance().getReference().child("Wall/" + category
+ "/" + wall_id + ".jpg");
File localFile = null;
try {
String fileName = wall_id + ".jpg";
localFile = new File();//create your file with desired path
} catch (Exception e) {
e.printStackTrace();
}
比像这样在该引用上调用 getFile
downloadRef.getFile(localFile)
.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
dialog.dismiss();
}
}).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Toast.makeText(WallOptionActivity.this, "Download failed!", Toast.LENGTH_SHORT).show();
}
});
文件将保存到指定路径。
考虑将 Picasso 用于您的目的。要将图像保存在外部磁盘上,您可以使用以下方法:
Picasso.with(mContext)
.load(ImageUrl)
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
try {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/yourDirectory");
if (!myDir.exists()) {
myDir.mkdirs();
}
String name = new Date().toString() + ".jpg";
myDir = new File(myDir, name);
FileOutputStream out = new FileOutputStream(myDir);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch(Exception e){
// some action
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}
);
From here 你可以下载这个库。
不要忘记在清单文件中添加权限
我已经在我的 firebase 中上传了图像文件。我已将 url 存储到 firebase 数据库。在存储过程中,为了得到 url 我使用了 Uri downloadUri = taskSnapshot.getDownloadUrl();
现在我想在单击按钮时从 url 下载该图像文件,并希望将该图像文件存储到 SD 卡的特定文件夹中,比如 "New Folder"
帮我写下面的代码....
FirebaseStorage mFirebaseStorage;
StorageReference httpsReference;
mFirebaseStorage = FirebaseStorage.getInstance();
httpsReference = mFirebaseStorage.getReferenceFromUrl(downloadUri);
Button b = findViewById(R.id.button);
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//what??
}
});
您需要实施 FileDownloadTask; see this example.
Environment.getExternalStorageDirectory()
是SD卡,可能需要申请权限android.permission.READ_EXTERNAL_STORAGE
才能访问该路径。例如。 https://developer.android.com/training/data-storage/files.html
首先像这样创建数据库引用和文件
StorageReference downloadRef = FirebaseStorage.getInstance().getReference().child("Wall/" + category
+ "/" + wall_id + ".jpg");
File localFile = null;
try {
String fileName = wall_id + ".jpg";
localFile = new File();//create your file with desired path
} catch (Exception e) {
e.printStackTrace();
}
比像这样在该引用上调用 getFile
downloadRef.getFile(localFile)
.addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
dialog.dismiss();
}
}).addOnProgressListener(new OnProgressListener<FileDownloadTask.TaskSnapshot>() {
@Override
public void onProgress(FileDownloadTask.TaskSnapshot taskSnapshot) {}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
Toast.makeText(WallOptionActivity.this, "Download failed!", Toast.LENGTH_SHORT).show();
}
});
文件将保存到指定路径。
考虑将 Picasso 用于您的目的。要将图像保存在外部磁盘上,您可以使用以下方法:
Picasso.with(mContext)
.load(ImageUrl)
.into(new Target() {
@Override
public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) {
try {
String root = Environment.getExternalStorageDirectory().toString();
File myDir = new File(root + "/yourDirectory");
if (!myDir.exists()) {
myDir.mkdirs();
}
String name = new Date().toString() + ".jpg";
myDir = new File(myDir, name);
FileOutputStream out = new FileOutputStream(myDir);
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out);
out.flush();
out.close();
} catch(Exception e){
// some action
}
}
@Override
public void onBitmapFailed(Drawable errorDrawable) {
}
@Override
public void onPrepareLoad(Drawable placeHolderDrawable) {
}
}
);
From here 你可以下载这个库。 不要忘记在清单文件中添加权限