gpt4 book ai didi

django - 在 django 应用程序上使用 django-storages 时,如何为存储在亚马逊 s3 上的图像获取 304?

转载 作者:行者123 更新时间:2023-12-04 18:48:37 25 4
gpt4 key购买 nike

我刚刚开始在 Amazon 的 S3 上存储用户上传的图像。它非常好,因为它解决了我的存储问题。但是,当涉及到让浏览器缓存图像时,我很挣扎。

我正在使用 django 存储。在他们的文档中,他们指定您可以通过在设置中设置 AWS_HEADER 变量来将内容放在图像的请求 header 上。我正在这样做,但没有得到任何结果。

基本上当应用程序请求图像时,我每次都会得到 200。 ARG ...当我将浏览器直接带到图像(将链接复制并粘贴到新窗口中)时,我每次都会得到 200 然后是 304。

这非常令人沮丧,因为它每次都重新下载图像。有些页面上有多达 25 个小缩略图,每次重新加载页面时都会重新下载所有内容。

我正在使用 djangos staticfiles 提供我的静态文件,并且它们工作正常。我得到 200,然后在缓存文件后得到 304。

这是我在 settings.py 中的 AWS 设置

DEFAULT_FILE_STORAGE = 'storages.backends.s3boto.S3BotoStorage'
AWS_ACCESS_KEY_ID = '***'
AWS_SECRET_ACCESS_KEY = '***'
AWS_STORAGE_BUCKET_NAME = 'foobar_uploads'
AWS_HEADERS = {
'Expires': 'Thu, 15 Apr 2020 20:00:00 GMT',
'Cache-Control': 'max-age=86400',
}

AWS_CALLING_FORMAT = CallingFormat.SUBDOMAIN

这是应用程序请求图像时的请求和响应 header :(我已将我认为可能是敏感信息的内容替换为“ * ”)
##request##
GET /user_uploads/*****/2012/3/17/14/46/thumb_a_28_DSC_0472.jpg?Signature=FVR6T%2BXFwHMmdQ9K3n7Ppp7QxoY%3D&Expires=1332023525&AWSAccessKeyId=***** HTTP/1.1
Host: *****_user_uploads_sandbox.s3.amazonaws.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Accept: */*
Referer: http://localhost:8000/m/my-photos/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3


##response##
HTTP/1.1 200 OK
x-amz-id-2: Hn3S+3gmeLHIjKCpz+2ocE6aPsLCVHh56jJYTsPHwxU98y89x+9X1Ml202evBUHT
x-amz-request-id: 528CEB880CA89AD3
Date: Sat, 17 Mar 2012 21:32:06 GMT
Cache-Control: max-age=86400
Expires: Thu, 15 Apr 2020 20:00:00 GMT
Last-Modified: Sat, 17 Mar 2012 20:46:29 GMT
ETag: "a3bc70e0c3fc0deb974edf95668e9030"
Accept-Ranges: bytes
Content-Type: image/jpeg
Content-Length: 8608
Server: AmazonS3

这是当我通过复制和粘贴图像链接手动请求图像时的请求/响应 header :
##request##
GET /user_uploads/*****/2012/3/17/14/46/thumb_a_28_DSC_0472.jpg?Signature=FVR6T%2BXFwHMmdQ9K3n7Ppp7QxoY%3D&Expires=1332023525&AWSAccessKeyId=***** HTTP/1.1
Host: porlio_user_uploads_sandbox.s3.amazonaws.com
Connection: keep-alive
Cache-Control: max-age=0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
If-None-Match: "a3bc70e0c3fc0deb974edf95668e9030"
If-Modified-Since: Sat, 17 Mar 2012 20:46:29 GMT



##response##
HTTP/1.1 304 Not Modified
x-amz-id-2: FZH0imrbNxziMznhl5zAoo38CaM7Z+TFnd8R6HtTYB3eTmVpCih+1IniKaliRo18
x-amz-request-id: 3CACF77FBB39D088
Date: Sat, 17 Mar 2012 21:33:22 GMT
Last-Modified: Sat, 17 Mar 2012 20:46:29 GMT
ETag: "a3bc70e0c3fc0deb974edf95668e9030"
Server: AmazonS3

我看到有一些差异,例如 "If-None-Match:"或 "If-Modified-Since:"。我认为如果我要设置这些,那么它应该像我想要的那样工作。

是否有捷径可寻?

谢谢你的帮助!

编辑 1:我读了这篇文章,但翻译得不是很好.. http://coder.cl/2012/01/django-and-amazon-s3/comment-page-1/

最佳答案

如果您不希望 django-storages 将 auth 查询添加到您的静态媒体,请将以下内容添加到您的 settings.py :

AWS_QUERYSTRING_AUTH = False

这是由 S3 Boto 后端引起的,它会通过 django-storages 自动附加查询字符串,除非另有指示。如果你看 source code对于该应用程序,您会注意到它会在您的 settings.py 中查找一些额外的未记录的设置。文件(大约第 34 行)。

我在 Github for django-compressor here 上回答了这个类似的问题.

关于django - 在 django 应用程序上使用 django-storages 时,如何为存储在亚马逊 s3 上的图像获取 304?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9754144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com