[Django]CentOSへファイルアップロード機能を持つシステムを構築する際の注意点3つ

CentOS 7Djangoを利用した、ファイルアップロード機能を持つWebアプリケーションを構築した時に文字コードとかファイルアクセスの問題とかで色々つまづいたので、備忘録として対処方法をまとめておきます。

前提条件

サーバの情報は下記の通りです。

  • CentOS Linux release 7.4.1708 (Core)
  • Apache/2.4.6 (CentOS)
  • Python 3.6.4 :: Anaconda, Inc.
  • Django 2.0.4

Shift_JISのファイルを読み込む際の文字コードの設定

ファイルを開いた際にエンコードを指定するのですが、通常の「shift_jis」を指定しても正常に動作しませんでした。エンコードに利用する文字コードは「shift_jisx0213」を指定する必要があります。

with open(file.path, 'r', encoding='shift_jisx0213') as file:
   ...

ファイルをアップロードするディレクトリの権限設定

ファイルのアップロードや読み取りを行うディレクトリのアクセス権をApacheが読み込み/書き込みができる状態にしておく必要があります。

$ sudo chown apache:apache /var/uploads
$ sudo chmod 755 /var/uploads

ファイル名に日本語(全角文字)が含まれているファイルをアップロードするための設定

Apacheが日本語ファイルを問題なく処理できるように「/etc/sysconfig/httpd」に文字コードの設定を行います。

# /etc/sysconfig/httpd

LANG='ja_JP.UTF-8'

最後に

DjangoPythonはまだまだ日本語の情報が少なく、対処法を探すのにかなり苦労しました。引き続きPythonDjangoで開発していく上でのハマりどころや便利機能など色々調べていきたいと思います。