同一Ubuntu内で下記の一つ目のファイル(post.py)を動作させ,Apache/2.4.7(Ubuntu)で下記の二つ目のファイル(flask_script.py)を動かしているのですが,flask_script.pyのposr_requestがうまく動きません.apacheのエラーを見たところ,PermissonError:[Errno 13]Permisson denied :".copy.png"と出ています.
flask_script.pyのpost_request以外のメソッドはうまく動き,curlコマンドでjsonを送った場合にも受信できているようです.ただ,ファイルの書き出し(copy.pngの作成)ができません.
cgiファイルは#flask_app.wsgiのようになっています.
ディレクトリ構成は,var/www/flaskフォルダにflask_script.pyとflask_app.cgiを配置してます
※追記
apacheの設定ファイルは下記の/etc/apache2/sites-available/flask.confのようになっています.
このサイトをhttp://blog.akashisn.info/entry/%3Fp%3D258を元にflaskとapacheを連携させています.
www以下のパーミッションはこのようになっています。
:/var/www$ ls -l
合計 8
drwxrwxrwx 3 www-data www-data 4096 8月 8 22:14 flask
drwxr-xr-x 2 root root 4096 8月 8 16:23 html
echoでflask以下にファイルが作成できるか試しました
$ echo "test" > /var/www/flask/hoge.txt $ cd /var/www $ cd flask/ $ ls __pycache__ flask_app.wsgi flask_script.py flask_script.py~ hoge.txt $ more hoge.txt test
python
1#post.py 2import urllib.request, json 3import base64 4 5def convert_b64(file_path): 6 """ 7 b64にエンコード 8 """ 9 return base64.encodestring(open(file_path, 'rb').read()).decode("utf-8") 10 11if __name__ == '__main__': 12 url = "http://0.0.0.0/post_request" 13 image = "test.jpg" 14 method = "POST" 15 headers = {"Content-Type" : "application/json"} 16 value = convert_b64(image) 17 # PythonオブジェクトをJSONに変換する 18 obj = {"key" : value} 19 json_data = json.dumps(obj).encode("utf-8") 20 # httpリクエストを準備してPOST 21 request = urllib.request.Request(url, data=json_data, method=method, headers=headers) 22 with urllib.request.urlopen(request) as response: 23 response_body = response.read().decode("utf-8") 24
python
1#flask_script.py 2# app.py 3from flask import Flask 4from flask import request 5import base64 6 7app = Flask(__name__) 8 9def convert_b64_to_file(b64,outfile_path): 10 """ 11 b64をデコードしてファイルに書き込む 12 """ 13 s = base64.decodestring(b64) 14 with open(outfile_path,"wb") as f : 15 f.write(s) 16 17@app.route("/") 18def index(): 19 return "convert to image" 20 21#base64でエンコードされたjsonファイルをデコード 22@app.route('/post_request', methods=['POST']) 23def post_request(): 24 #request.jsonでにPOSTされたデータを取ってくる 25 temp = request.json["key"] 26 #byteに変換 27 temp = bytes(temp,"utf-8") 28 #デコード 29 convert_b64_to_file(temp,"./copy1.png") 30 return temp 31 32 33if __name__ == "__main__": 34 app.debug = True 35 app.run(host="0.0.0.0") 36 # curl http://127.0.0.1:5000/post_request -X POST -H "Content-Type: application/json" -}''{"key": "value"} 37
python
1#flask_app.wsgi 2import os,sys 3 4sys.path.insert(0, os.path.abspath(os.path.dirname(__file__))) 5 6from flask_script import app as application
#flask.conf <VirtualHost *:80> ServerName localhost WSGIDaemonProcess flask_app user=www-data group=www-data threads=5 WSGIScriptAlias / /var/www/flask/flask_app.wsgi <Directory /var/www/flask> WSGIProcessGroup flask_app WSGIApplicationGroup %{GLOBAL} Order deny,allow Allow from all </Directory> </VirtualHost>
回答3件
あなたの回答
tips
プレビュー