我在我的android应用程序中使用firebase存储来存储用户上传的图片。所有上传的图片都是方形的。
我发现下载这些图像会消耗大量的用户带宽,我想通过减小下载到方形imageview中的图像的大小来减少这一消耗
我正在使用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 x 200px。
如何在上面的解决方案1中执行或更改以从Firebase存储下载自定义大小的图像?
编辑
我已尝试从浏览器访问我的一个图像https://firebasestorage.googleapis.com/....m.png,该图像已成功加载到网页。但是当我试图将特定的参数设置为图片url链接时,网页上出现了一个错误
 {
  "error": {
    "code": 403,
    "message": "Permission denied. Could not perform this operation"
  }
}

最佳答案

我终于可以使用MyUrlLoader类从firebase存储中下载图像
你看,firebase存储url如下所示

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

解决方法是在我的课上去掉?。结果就这样
    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)

09-10 01:58
查看更多