标签: image-caching

如何强制Web浏览器不缓存图像

背景

我正在为两个无偿网站编写和使用一个非常简单的基于CGI(Perl)的内容管理工具.它为网站管理员提供HTML表单,用于填写字段(日期,地点,标题,描述,链接等)的事件并保存.在该表单上,我允许管理员上传与事件相关的图像.在显示表单的HTML页面上,我还显示了上传图片的预览(HTML img标签).

问题

当管理员想要更改图片时,会发生此问题.他只需点击"浏览"按钮,选择一张新照片然后按确定即可.这很好用.

上传图像后,我的后端CGI处理上传并正确地重新加载表单.

问题是显示的图像没有刷新.即使数据库保存正确的图像,仍会显示旧图像.我已将其缩小到图像在Web浏览器中缓存的事实.如果管理员点击Firefox /资源管理器/ Safari中的RELOAD按钮,则所有内容都会刷新,并且只会显示新图像.

我的解决方案 - 不工作

我试图通过写一个过去很远的日期的HTTP Expires指令来控制缓存.

Expires: Mon, 15 Sep 2003 1:00:00 GMT
Run Code Online (Sandbox Code Playgroud)

请记住,我在管理方面,我并不关心页面是否需要更长时间才能加载,因为它们总是过期.

但是,这也不起作用.

笔记

上传图像时,其文件名不会保留在数据库中.它被重命名为Image.jpg(在使用时简单地说出来).使用新图像替换现有图像时,名称也不会更改.只是图像文件的内容发生了变化.

网络服务器由托管服务/ ISP提供.它使用Apache.

有没有办法强制Web浏览器不缓存此页面中的内容,甚至图像?

我正在使用数据库实际"保存文件名"的选项.这样,如果图像被更改,IMG标签的src也将改变.但是,这需要在整个站点进行大量更改,如果我有更好的解决方案,我宁愿不这样做.此外,如果上传的新图像具有相同的名称(例如图像有点照片并重新上传),这仍然无效.

html caching image image-caching browser-cache

115
推荐指数
8
解决办法
19万
查看次数

使用Apache进行网站图像缓存

我怎样才能获得Apache上的静态内容{被浏览器缓存}而不是{检查新鲜度{每次请求}}?

我正在Apache webserver上托管的网站上工作.最近,我正在使用标题(针对不同类型的内容的Content-Type)进行测试,并看到了很多对图像的条件请求.例:

200 /index.php?page=1234&action=list
304 /favicon.ico
304 /img/logo.png
304 /img/arrow.png
(etc.)
Run Code Online (Sandbox Code Playgroud)

虽然图像文件是静态内容并且由浏览器缓存,但每次用户打开链接到它们的页面时,它们都是有条件请求的,它们发送"304 Not Modified".这很好(传输的数据较少),但这意味着每次页面加载会产生20多个请求(由于所有这些往返行程导致页面加载时间更长,即使启用了Keep-Alive和流水线操作).

如何告诉浏览器保留现有文件而不检查更新版本?

编辑:mod_expires方法工作,即使使用favicon.

apache mod-expires image-caching

43
推荐指数
2
解决办法
6万
查看次数

有没有办法强制浏览器刷新/下载图像?

我有一个问题,用户报告他们的图像没有上传,旧图像仍在那里.仔细观察后,新图像就在那里,它们与旧图像的名称相同.我在上传时做的是我为了SEO目的重命名图像.当他们删除图像时,旧索引变为可用并被重用.因此它具有相同的图像名称.

有没有办法(我想可能有一个元标记)告诉浏览器不使用它的cahce?

更好的答案是将图像重命名为全新的.我将继续努力,但同时我在处理更大的问题时是快速的解决方案.

html browser image-caching browser-cache

42
推荐指数
4
解决办法
7万
查看次数

Glide:如何查找图像是否已缓存并使用缓存版本?

场景:

我有一个大的GIF图像,我想在用户首次使用Glide - 图像加载和缓存库打开应用程序时缓存.在用户打开应用程序之后,我想显示缓存版本(如果存在).此GIF URL将在给定间隔后过期.当它到期时,我会获取新的GIF URL并显示/缓存该URL以供将来使用.

我尝试了什么:

我在Glide的github页面上浏览了Caching和Cache Invalidation.我还去了谷歌集团的线程确保加载的图像仅来自磁盘缓存,它显示了如何获取图像格式缓存.我还经历了如何使某些特定图像问题的Glide缓存无效.

从上面的链接我看到以下代码片段,其中显示了如何从缓存加载图像.但是,这只会尝试从缓存中获取图像.如果它不存在于缓存中,则它不会尝试从网络获取并失败:

Glide.with(TheActivity.this)
        .using(new StreamModelLoader<String>() {
            @Override
            public DataFetcher<InputStream> getResourceFetcher(final String model, int i, int i1) {
                return new DataFetcher<InputStream>() {
                    @Override
                    public InputStream loadData(Priority priority) throws Exception {
                        throw new IOException();
                    }

                    @Override
                    public void cleanup() {
                    }

                    @Override
                    public String getId() {
                        return model;
                    }

                    @Override
                    public void cancel() {
                    }
                };
            }
        })
       .load("http://sampleurl.com/sample.gif")
       .diskCacheStrategy(DiskCacheStrategy.SOURCE)
       .into(theImageView);
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是否有更简洁的方法来实现以下功能:如果存在,则从缓存中显示GIF图像,然后下载GIF,将其缓存以供以后使用并在中显示ImageView …

android image-caching android-glide

25
推荐指数
1
解决办法
3万
查看次数

SDWebImage和设置自定义HTTP标头?

我刚刚将用于缓存图像的代码从EGOImageCache更改为SDWebView.不幸的是我不知道如何设置自定义HTTP标头,因为我必须发送身份验证才能获取图像.使用EGOImageCache很容易,因为我已经在适当的地方扩展了NSURLRequest.但是我不知道如何使用SDWebView.framework来做到这一点.我看到标题,我在SDWebImageDownloader.h中找到了包含的方法

    /**
 * Set a value for a HTTP header to be appended to each download HTTP request.
 *
 * @param value The value for the header field. Use `nil` value to remove the header.
 * @param field The name of the header field to set.
 */
- (void)setValue:(NSString *)value forHTTPHeaderField:(NSString *)field;

/**
 * Returns the value of the specified HTTP header field.
 *
 * @return The value associated with the header field field, or `nil` if there is no …
Run Code Online (Sandbox Code Playgroud)

uiimageview image-caching http-headers sdwebimage

20
推荐指数
1
解决办法
9389
查看次数

Android java.lang.OutOfMemoryError?

04-25 08:19:10.111    2431-2603/com.example.francesco.guidedautorewithtabs E/art? Throwing OutOfMemoryError "Failed to allocate a 4194316 byte allocation with 1983651 free bytes and 1937KB until OOM"
04-25 08:19:10.114    2431-2603/com.example.francesco.guidedautorewithtabs E/AndroidRuntime? FATAL EXCEPTION: GLThread 285
Process: com.example.francesco.guidedautorewithtabs, PID: 2431
java.lang.OutOfMemoryError: Failed to allocate a 4194316 byte allocation with 1983651 free bytes and 1937KB until OOM
        at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
        at android.graphics.Bitmap.nativeCreate(Native Method)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:817)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:794)
        at android.graphics.Bitmap.createBitmap(Bitmap.java:761)
        at com.google.maps.api.android.lib6.gmm6.o.c.l.a(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.o.c.o.a(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.o.c.o.a(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.o.c.o.b(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.o.c.b.ak.a(Unknown Source)
        at com.google.maps.api.android.lib6.gmm6.o.c.b.as.a(Unknown Source)
        at …
Run Code Online (Sandbox Code Playgroud)

performance android memory-leaks out-of-memory image-caching

17
推荐指数
2
解决办法
4万
查看次数

如何在 Github Action 中运行缓存的 Docker 镜像?

我不知道如何在 Github Actions 中运行缓存的 Docker 映像。
我按照有关发布 Docker 映像的教程来实现缓存、构建 Docker 映像并将其推送到 DockerHub 的任务。
我需要构建、缓存和运行图像,图像发布是可选的。
我的目标是加快 CI 工作流程。
以下是 Github Actions 工作流程:

name: CI

# Controls when the action will run. 
on:
  # Triggers the workflow on push or pull request events but only for the master branch
  push:
    branches: [ master ]
  pull_request:
    branches: [ master ]

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

# A workflow run is made up of …
Run Code Online (Sandbox Code Playgroud)

image-caching docker github-actions

16
推荐指数
2
解决办法
2万
查看次数

缓存URL图片iphone UITableview

我正在寻找一个关于如何将从url加载的图像缓存到uitableview的单元格中的教程.

我在这里找到了一个例子

http://www.ericd.net/2009/05/iphone-caching-images-in-memory.html#top

但代码不完整.我是一个客观的新手所以我发现填补缺失的部分非常困难.

iphone cocoa-touch uitableview image-caching ios

11
推荐指数
2
解决办法
2万
查看次数

Android - 如何从Fresco磁盘缓存获取图像文件?

我正在使用Fresco库.

我在Fresco文档中找不到任何相关信息,如何从Fresco的磁盘缓存中获取图像文件?

java android image-caching fresco

11
推荐指数
2
解决办法
1万
查看次数

Android Glide:如何下载和缓存位图?

我正在使用Glide在Android上下载和缓存图像.一切都很好,除了我不想直接加载位图ImageView,我不想有淡入淡出动画,也不想有图像占位符.

我想要的只是创建一个全局方法,它将帮助我在整个应用程序中下载图像.

public class MyApp extends Application {

   public static void downloadImage(String url, final OnImageLoadedCallback callback) {

     // And how to implement the listener ?

     RequestListener<String, Bitmap> requestListener = new RequestListener<String, Bitmap() {
        @Override
        public boolean onException(Exception exc, String string, Target<Bitmap> target, boolean isFirstResource) {

           callback.onDone(null);               

           return false;
        }

        @Override
        public boolean onResourceReady(Bitmap bitmap, String string, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {

            callback.onDone(bitmap);

            return false;
        }
     };

      Glide.with(context)
           .load(url)
           .asBitmap()
           .dontAnimate()
           .diskCacheStrategy(DiskCacheStrategy.SOURCE)
           .listener(requestListener);
   }

}
Run Code Online (Sandbox Code Playgroud)

问题是我不知道如何实现监听器.RequestListener …

android image-caching android-glide

10
推荐指数
2
解决办法
2万
查看次数