0

現在の設定:

  • nginxはポート80でリッスンし、example.comリクエストを8080のApacheに転送します
  • ポート8080でリッスンしているApache、wsgi経由でDjangoアプリに接続
  • Djangoフォームは画像をサブドメインphotos.example.com/upload/にアップロードします

これはnginxの構成ファイルからのもののようですが、指を置くことができません。私は主にnginxでupload_storeディレクティブを変更しようとしました。ユーザーがアップロードした写真を/var/ www / dev / source / nginx /media/に保存したい

私が今できる最善のことは、/ var/wwwからそれらを入れたいフォルダへのシンボリックリンクです。

関連するnginx構成:

server {
        client_max_body_size 100m;
        listen 80;
        server_name photos.example.com;
        access_log /var/log/nginx/photos.example.com/access.log;
        error_log /var/log/nginx/photos.example.com/error.log;


        # Upload form should be submitted to this location
        location /upload {
                # Pass altered request body to this location

                # Store files to this location
                upload_store /var/www/dev/source/nginx/media 1;
                # Set specified fields in request body
                upload_set_form_field $upload_field_name.name "$upload_file_name";
                upload_set_form_field $upload_field_name.content_type "$upload_content_type";
                upload_set_form_field $upload_field_name.path "$upload_tmp_path";
        }
        # Pass altered request body to a proxy

        location / {
                root /var/www/dev/source/nginx/media;
        }
}

関連models.py

def rename_image(instance,filename):
    random = ''.join([choice(letters) for i in xrange(10)])
    today = datetime.date.today()
    userid = instance.user.username
    filename = '_'.join([today.strftime('%s'),userid,random,filename])
    return'/'.join(['images','users',userid,filename])


class Users(models.Model):
    user        = models.OneToOneField(User)
    ...
    photo       = models.ImageField(upload_to=rename_image)

編集:

別のパス(テストとしてimgzというディレクトリを作成)に設定しようとすると、これはnginxエラーログにあります:(その後、imgzも作成して修正されるかどうかを確認しましたが、修正されませんでした)

2012/12/02 09:37:44[エラー]31229#0:* 56472 open() "/var/www/dev/source/nginx/media/imgz/users/1354424400_lmDdkskvEPbrtUYBudgzsLjiOXvywx_gwslfBWlBk_me.jpg"が失敗しました(2:そのようなものはありませんファイルまたはディレクトリ)、クライアント:xx.xx.example.example、サーバー:photos.example.com、リクエスト: "GET /imgz/users/1354424400_lmDdkskvEPbrtUYBudgzsLjiOXvywx_gwslfBWlBk_me.jpg HTTP / 1.1"、ホスト: "photos.example.com"、リファラー: " http://dev.example.com/lmDdkskvEPbrtUYBudgzsLjiOXvywx "

EDIT2:

実際、これはPOSTの後に発生するGETリクエストです。アップロードされたばかりの画像を表示しようとしているのはDjangoアプリです。私が正しく覚えていれば、フォームのPOSTはほとんどの場合成功します。パスを変更すると、/ var/wwwに別のパスが作成されます。

4

0 に答える 0