我在我的
Android应用程序中使用firebase存储来存储用户上传的图像.上传的所有图片均为方形.
我发现下载这些图像消耗了大量的用户带宽,我想通过减少下载到方形图像视图中的图像大小来减少这种消耗
我正在使用Glide下载此图像,我试图下载自定义尺寸的图像,但图像没有出现在imageview上.
接口
public interface MyDataModel {
public String buildUrl(int width, int height);
}
我的类扩展了BaseGlideUrlLoader
public class MyUrlLoader extends BaseGlideUrlLoader<MyDataModel> {
public MyUrlLoader(Context context) {
super(context);
}
@Override
protected String getUrl(MyDataModel model, int width, int height) {
// Construct the url for the correct size here.
return model.buildUrl(width, height);
}
}
实现MyDataModel接口的类
public class CustomImageSize implements MyDataModel {
private String uri;
public CustomImageSize(String uri){
this.uri = uri;
}
@Override
public String buildUrl(int width, int height) {
return uri + "?w=" + width + "&h=" + height;
}
}
最后
CustomImageSize size = new CustomImageSize(uri);
Glide.with(context)
.using(new MyUrlLoader(context))
.load(size)
.centerCrop()
.priority(Priority.HIGH)
.into(imageView);
上述解决方案的结果
图像没有出现在我的方形图像视图中
解决方案2:使用firebase图像加载器
// Reference to an image file in Firebase Storage
StorageReference storageReference = ...;
ImageView imageView = ...;
// Load the image using Glide
Glide.with(this /* context */)
.using(new FirebaseImageLoader())
.load(storageReference)
.into(imageView);
上述解决方案2的结果
工作!图像出现但是就像整个图像被下载消耗了大量带宽一样.我只想要下载自定义尺寸的图像,例如200px×200px.
如何在上面的解决方案1中执行或更改以从firebase存储中下载自定义大小的图像?
编辑
我试图从浏览器访问我的一个图像https://firebasestorage.googleapis.com/….m.png并将其成功加载到网页.但是当我尝试将特定参数调整到我的图像网址链接https://firebasestorage.googleapis.com/….m.png?w=100\u0026amp;h=100时,网页上出现错误
{
"error": {
"code": 403,
"message": "Permission denied. Could not perform this operation"
}
}
最佳答案 我终于能够使用MyUrlLoader类从firebase存储下载图像
你看,firebase存储网址看起来像这样
firebasestorage.googleapis.com/XXXX.appspot.com/Folder%2Image.png?&alt=media&token=XXX
如您所见,链接已经有这个特殊的问号字符?它代表查询字符串的开始,所以当我使用CustomImageSize类时,另一个?被添加,所以链接最终有两个?这导致下载失败
firebasestorage.googleapis.com/XXXX.appspot.com/Folder%2Image.png?&alt=media&token=XXX?w=200&h=200
解决方案是删除?在我的CustomImageSize类中.所以它最终是这样的
public class CustomImageSize implements MyDataModel {
private String uri;
public CustomImageSize(String uri){
this.uri = uri;
}
@Override
public String buildUrl(int width, int height) {
return uri + "w=" + width + "&h=" + height;
}
}
虽然它已下载,但我不确定是要下载整个图像还是仅保留自定义尺寸.这是因为,我在纠正导致查看失败的错误后尝试在我的浏览器中访问该图像,但我仍然收到整个图像.没有调整大小的图像(w = 200& h = 200)