mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-30 14:57:59 +01:00
Deal with content type screwery
This commit is contained in:
parent
7094f14072
commit
fd758b7f0d
3 changed files with 39 additions and 6 deletions
|
@ -6,6 +6,16 @@ upstream s3 {
|
||||||
server files:80 fail_timeout=0;
|
server files:80 fail_timeout=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
map $uri $custom_content_type {
|
||||||
|
default "text/html";
|
||||||
|
~(.*\.png)$ "image/png";
|
||||||
|
~(.*\.jpe?g)$ "image/jpeg";
|
||||||
|
~(.*\.gif)$ "image/gif";
|
||||||
|
~(.*\.svg)$ "image/svg+xml";
|
||||||
|
~(.*\.mp4)$ "video/mp4";
|
||||||
|
~(.*\.webm)$ "video/webm";
|
||||||
|
}
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 80 default;
|
listen 80 default;
|
||||||
listen [::]:80;
|
listen [::]:80;
|
||||||
|
@ -19,6 +29,8 @@ server {
|
||||||
expires max;
|
expires max;
|
||||||
add_header Cache-Control public;
|
add_header Cache-Control public;
|
||||||
proxy_pass http://s3/$BUCKET_NAME/images/$1/$2/full.$3;
|
proxy_pass http://s3/$BUCKET_NAME/images/$1/$2/full.$3;
|
||||||
|
proxy_hide_header Content-Type;
|
||||||
|
add_header Content-Type $custom_content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^/img/download/(.+)/([0-9]+).*\.([A-Za-z0-9]+)$ {
|
location ~ ^/img/download/(.+)/([0-9]+).*\.([A-Za-z0-9]+)$ {
|
||||||
|
@ -26,36 +38,48 @@ server {
|
||||||
expires max;
|
expires max;
|
||||||
add_header Cache-Control public;
|
add_header Cache-Control public;
|
||||||
proxy_pass http://s3/$BUCKET_NAME/images/$1/$2/full.$3;
|
proxy_pass http://s3/$BUCKET_NAME/images/$1/$2/full.$3;
|
||||||
|
proxy_hide_header Content-Type;
|
||||||
|
add_header Content-Type $custom_content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^/img/(.+) {
|
location ~ ^/img/(.+) {
|
||||||
expires max;
|
expires max;
|
||||||
add_header Cache-Control public;
|
add_header Cache-Control public;
|
||||||
proxy_pass http://s3/$BUCKET_NAME/images/$1;
|
proxy_pass http://s3/$BUCKET_NAME/images/$1;
|
||||||
|
proxy_hide_header Content-Type;
|
||||||
|
add_header Content-Type $custom_content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^/spns/(.+) {
|
location ~ ^/spns/(.+) {
|
||||||
expires max;
|
expires max;
|
||||||
add_header Cache-Control public;
|
add_header Cache-Control public;
|
||||||
proxy_pass http://s3/$BUCKET_NAME/adverts/$1;
|
proxy_pass http://s3/$BUCKET_NAME/adverts/$1;
|
||||||
|
proxy_hide_header Content-Type;
|
||||||
|
add_header Content-Type $custom_content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^/avatars/(.+) {
|
location ~ ^/avatars/(.+) {
|
||||||
expires max;
|
expires max;
|
||||||
add_header Cache-Control public;
|
add_header Cache-Control public;
|
||||||
proxy_pass http://s3/$BUCKET_NAME/avatars/$1;
|
proxy_pass http://s3/$BUCKET_NAME/avatars/$1;
|
||||||
|
proxy_hide_header Content-Type;
|
||||||
|
add_header Content-Type $custom_content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^/badges/(.+) {
|
location ~ ^/badges/(.+) {
|
||||||
expires max;
|
expires max;
|
||||||
add_header Cache-Control public;
|
add_header Cache-Control public;
|
||||||
proxy_pass http://s3/$BUCKET_NAME/badges/$1;
|
proxy_pass http://s3/$BUCKET_NAME/badges/$1;
|
||||||
|
proxy_hide_header Content-Type;
|
||||||
|
add_header Content-Type $custom_content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
location ~ ^/tags/(.+) {
|
location ~ ^/tags/(.+) {
|
||||||
expires max;
|
expires max;
|
||||||
add_header Cache-Control public;
|
add_header Cache-Control public;
|
||||||
proxy_pass http://s3/$BUCKET_NAME/tags/$1;
|
proxy_pass http://s3/$BUCKET_NAME/tags/$1;
|
||||||
|
proxy_hide_header Content-Type;
|
||||||
|
add_header Content-Type $custom_content_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
|
|
|
@ -8,6 +8,7 @@ defmodule Philomena.Images.Thumbnailer do
|
||||||
alias Philomena.Images.Image
|
alias Philomena.Images.Image
|
||||||
alias Philomena.Processors
|
alias Philomena.Processors
|
||||||
alias Philomena.Analyzers
|
alias Philomena.Analyzers
|
||||||
|
alias Philomena.Uploader
|
||||||
alias Philomena.Sha512
|
alias Philomena.Sha512
|
||||||
alias Philomena.Repo
|
alias Philomena.Repo
|
||||||
alias ExAws.S3
|
alias ExAws.S3
|
||||||
|
@ -131,10 +132,7 @@ defmodule Philomena.Images.Thumbnailer do
|
||||||
def upload_file(image, file, version_name) do
|
def upload_file(image, file, version_name) do
|
||||||
path = Path.join(image_thumb_prefix(image), version_name)
|
path = Path.join(image_thumb_prefix(image), version_name)
|
||||||
|
|
||||||
file
|
Uploader.persist_file(path, file)
|
||||||
|> S3.Upload.stream_file()
|
|
||||||
|> S3.upload(bucket(), path, @acl)
|
|
||||||
|> ExAws.request!()
|
|
||||||
end
|
end
|
||||||
|
|
||||||
defp bulk_rename(file_names, source_prefix, target_prefix) do
|
defp bulk_rename(file_names, source_prefix, target_prefix) do
|
||||||
|
|
|
@ -6,6 +6,7 @@ defmodule Philomena.Uploader do
|
||||||
alias Philomena.Filename
|
alias Philomena.Filename
|
||||||
alias Philomena.Analyzers
|
alias Philomena.Analyzers
|
||||||
alias Philomena.Sha512
|
alias Philomena.Sha512
|
||||||
|
alias Philomena.Mime
|
||||||
alias ExAws.S3
|
alias ExAws.S3
|
||||||
import Ecto.Changeset
|
import Ecto.Changeset
|
||||||
|
|
||||||
|
@ -64,9 +65,19 @@ defmodule Philomena.Uploader do
|
||||||
dest = Map.get(model, field(field_name))
|
dest = Map.get(model, field(field_name))
|
||||||
target = Path.join(file_root, dest)
|
target = Path.join(file_root, dest)
|
||||||
|
|
||||||
source
|
persist_file(target, source)
|
||||||
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Persist an arbitrary file to storage at the given path with the correct
|
||||||
|
content type and permissions.
|
||||||
|
"""
|
||||||
|
def persist_file(path, file) do
|
||||||
|
{_, mime} = Mime.file(path)
|
||||||
|
|
||||||
|
file
|
||||||
|> S3.Upload.stream_file()
|
|> S3.Upload.stream_file()
|
||||||
|> S3.upload(bucket(), target, acl: :public_read)
|
|> S3.upload(bucket(), path, acl: :public_read, content_type: mime)
|
||||||
|> ExAws.request!()
|
|> ExAws.request!()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue