1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[homebrew] M1 Macでnginxのサーバーにファイルをアップロードする

Posted at

前提

上述したリンクの設定を引き継いだ前提で、ディレクトリ構成を行なっています。
nginxのconfigurationも前回の設定のままで変更不要です。(.pyのロケーションにPOSTを許可しなくても動作するのが不思議ですが、、)

ステップ1: nginxとfcgiwrapの起動を確認

fcgiwrapが起動していることを確認

コマンド

ps aux | grep fcgiwrap

_www 30072 0.0 0.0 410629888 1344 ?? Ss 10:45AM 0:00.01 /opt/homebrew/Cellar/fcgiwrap/1.1.0/sbin/fcgiwrapみたいなのが出ればOKです。

nginxが起動していることを確認

コマンド

ps aux | grep nginx

_www 30145 0.0 0.0 411434160 2272 ?? S 10:46AM 0:00.06 nginx: worker process root 30144 0.0 0.0 410740656 288 ?? Ss 10:46AM 0:00.00 nginx: master process nginxみたいなのが出ればOKです。

どちらかがうまくいっていない場合はnginxのCGIを動かすを参照して、起動させてください。

ステップ2: ディレクトリとファイルの準備

アップロード先ディレクトリの準備

作成

mkdir /opt/homebrew/Cellar/nginx/1.25.4/html/upload

権限変更

sudo chmod 777 /opt/homebrew/Cellar/nginx/1.25.4/html/upload

htmlファイル(ユーザーのインターフェース)の準備

upload.htmlの作成

以下のディレクトリにてupload.htmlを作成する。

cd /opt/homebrew/Cellar/nginx/1.25.4/html

upload.htmlの内容

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>ファイルアップロード</title>
</head>
<body>

<h2>ファイルアップロード</h2>
<form action="/upload.py" method="post" enctype="multipart/form-data">
  ファイルを選択:
  <input type="file" name="file">
  <input type="submit" value="アップロード">
</form>

</body>
</html>

upload.htmlファイル権限の変更はいらないと思いますが、permissionのエラーが出た場合は権限を変更してください。

.pyファイル(postメソッドを行う)の準備

upload.pyの作成

以下のディレクトリにてupload.pyを作成する。

cd /opt/homebrew/Cellar/nginx/1.25.4/cgi-bin

upload.pyの内容

#!/opt/homebrew/bin/python

import cgi
import os
from http import cookies
import cgitb; cgitb.enable()  # CGIデバッグを有効化

form = cgi.FieldStorage()

# ファイルアップロードフィールドのチェック
fileitem = form['file']

if fileitem.filename:
    # ウェブサーバ上のディレクトリへのファイルパスを設定
    fn = os.path.basename(fileitem.filename)
    filepath = '/opt/homebrew/Cellar/nginx/1.25.4/html/upload/' + fn
    with open(filepath, 'wb') as f:
        f.write(fileitem.file.read())
    message = 'ファイル "{}" のアップロードに成功しました'.format(fn)
else:
    message = 'ファイルがアップロードされませんでした'

# HTMLコンテンツをUTF-8として出力
print("Content-Type: text/html; charset=utf-8\n")
print("""
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>アップロード結果</title>
</head>
<body>
   <p>{}</p>
</body>
</html>
""".format(message))

* 1行目の#!/opt/homebrew/bin/pythonはあなたのPCの環境設定に合わせてください

もし、cgi-binディレクトリの権限が_wwwで、ファイルの作成ができない場合は以下の対応を行なってください。
対応① upload.htmlをデスクトップに作成する。
対応② sudo + mvコマンドでファイルを移動する。例sudo mv path_to/upload.html /opt/homebrew/Cellar/nginx/1.25.4/cgi-bin

権限変更

.pyの実行権限を全てのユーザーにします

sudo chmod 777 cd /opt/homebrew/Cellar/nginx/1.25.4/cgi-bin/upload.py

ステップ3:ブラウザからアップロード

ブラウザからhttp://localhost:8100/upload.pyにアクセスして、ファイルをuploadすると、/opt/homebrew/Cellar/nginx/1.25.4/html/uploadにファイルがあるはずです。

今回はここまで!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?