29815


Python
Flaskでファイルを保存するときにそのファイルのsha1ハッシュをファイル名として利用したいのですが、以下のように`request.data`のハッシュを計算すると常に同じ値になります。  
それは <https://stackoverflow.com/questions/10434599/how-can-i-get-the-whole-
request-post-body-in-python-with-flask>
この質問で述べられている通り、`request.data`が空になっているからだと考えられます。  
そこで他にポストされたファイルのハッシュを計算する方法などありますでしょうか。

[code]

    @app.route('/upload', methods=['POST'])
    def upload():
        f = request.files["file"]
        root, ext = os.path.splitext(f.filename)
        if not allowed_file(ext):
            abort(400)
        print(f.filename)
        fname = sha1(request.data).hexdigest() + ext
        f.save(os.path.join(TEST_IMAGE_DIR, fname))
        res = dict(filename = fname)
        return jsonify(res)
    
[/code]


CC BY-SA 3.0
2016-07-24T02:34:34.173
27830
2016-10-22T16:57:07.237
2017-05-23T12:38:56.467
-1
7232
question
python flask
Flaskでアップロードされたファイルのデータ、request.data が空になってしまう

[code]

    request.files["file"]
    
[/code]

の戻り値がポストされたファイルに対応する `file object` になっていますので、

[code]

    sha1(f.read()).hexdigest()
    
[/code]

とすれば良いかと思います。  
ただ、`read()`を実行するとファイルポインタがファイルの最後に移動してしまいますので、`save()`を実行する前に`f.seek(0,
0)`として、ファイルポインタをファイルの先頭に戻しておく必要があります


CC BY-SA 3.0
2016-10-22T16:53:48.810
29815
2016-10-22T16:53:48.810
3054
27830
answer