【问题标题】:PHP Google App Engine permanently delete Image from Cloud StoragePHP Google App Engine 从云存储中永久删除图像
【发布时间】:2014-06-13 05:56:33
【问题描述】:

我使用的是 GAE 1.9.0 版,我想从数据存储中删除一张图片并将另一张图片上传到它的位置。这就是我现在的做法。

unlink("gs://my_storage/images/test.jpg");
move_uploaded_file($_FILES['image']['tmp_name'],'gs://my_storage/images/test.jpg');

然后我想获取最新上传的图片的图片服务网址,我就是这样做的。

$image_link = CloudStorageTools::getImageServingUrl("gs://my_storage/images/test.jpg");

问题是,当删除的图片(“test.jpg”)和上传的图片(“test.jpg”)的名称相同时,提供旧文件调用新上传的文件(我认为它被缓存了。)

无论如何我可以永久删除这个文件而不缓存它吗?

【问题讨论】:

  • 我认为这是一个缓存问题。看到这个答案:stackoverflow.com/questions/13996116/…
  • 感谢彼得的回复,但如果缓存被禁用,那会是个问题吧?就像加载图像需要很多时间。有没有办法删除图片和缓存,所以缓存会一直服务到图片被删除?
  • 您是否清除了自己的浏览器缓存?
  • 是的。这是我做的第一件事。

标签: php google-app-engine google-cloud-storage


【解决方案1】:

您应该先删除原来的服务网址,然后再创建另一个同名网址。

CloudStorageTools 中有一个 deleteImageServingUrl() 方法可用于执行此操作。

【讨论】:

    【解决方案2】:

    这里是如何在 php laravel 中做的。

     $object = $post_media->media_cloud;
     $objectname = substr($object,48,100); 
     $bucket = Storage::disk('gcs')->delete($objectname);
    
    1. 在 $object 中,我从 db 获取 google 云图像 url
    2. 然后我们只从该 url 中获取对象名称,通过 substr。
    3. 由于您在配置存储类中给出了 Storage::disk('gcs')

    所以这将通过获取 objectname 来调用函数 delete

    希望它可以帮助任何人。

    注意:对于多个图像,要么传递一个对象数组,要么在 foreach 循环中重复它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-20
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 2017-05-04
      相关资源
      最近更新 更多