2017-01-30 2 views
0

という名前にリダイレクト。私は物事をちょっと分類するために、各ファイルをランダムに生成されたフォルダ名に入れようとしています。フラスコは私がします(最終的に)小さなアプリケーションを構築していますランダムフォルダ

まず、アップロードリダイレクトが機能していますが、ほとんど存在していますが、ファイルが存在していてもファイルがランダムに生成されたフォルダ名にリダイレクトするようには思えませんアップロードされました。

ここ

私はこれを達成しています方法です...リダイレクトで

@app.route('/upload', methods=['POST']) 
def upload(): 
    file = request.files['file'] 
    if file and allowed_file(file.filename): 
     filename = secure_filename(file.filename) 
     foldername = tempfile.mkdtemp(prefix='file', dir='uploads') 
     file.save(os.path.join(foldername, filename)) 
     return redirect(url_for('uploaded_file', foldername=foldername, filename=filename)) 
    else: 
     return '<h3>Invalid File, PDF or image only.</h3>' 

@app.route('/<foldername>/<filename>') 
def uploaded_file(foldername, filename): 
    return send_from_directory(filename) 

、ファイルが正しい場所にあり、そしてフォルダが正しい場所にあり、ブラウザは右に向かっていますフラスコ404sそれは...

192.168.1.69 - - [29/Jan/2017 22:32:19] "GET/HTTP/1.1" 200 - 
192.168.1.69 - - [29/Jan/2017 22:32:25] "POST /upload HTTP/1.1" 302 - 
192.168.1.69 - - [29/Jan/2017 22:32:25] "GET /uploads/file0wr5ug4y/Screen_Shot_2017-01-25_at_11.23.48_AM.png HTTP/1.1" 404 - 
+0

のように見えるあなたは '/アップロード/ fileXXXXX'にアクセスしているが、フラスコ内のマップされたURLは、単に右のリンクを示唆しているようだ' /フォルダ名/ filename'されています'/ file0wr5ug4y/Screen_Shot_2017-01-25_at_11.23.48_AM.png'(注:'/uploads'なしで)です。それを試して、それがどうなるかを見てください。 –

+0

ドキュメントは、tempfile.mkdtemp()から返された値は絶対パスであり、私のテストはそれが正確であることを確認します。プレフィックスは既に変数値にあります。プレフィックスをルートに追加すると、URLに2つのプレフィックスが付きます。 192.168.1.69 - [29/Jan/2017 22:52:30] "GET /uploads/uploads/filef8gs8rdb/Screen_Shot_2017-01-25_at_10.44.53_AM.png HTTP/1.1" 404 - – RNC

+0

どうしたらいいですか@ format(foldername、filename)) ' –

答えて

0

返信の最初の文字列に最後のコメントを無視し、試行錯誤しました。

foldernameはsend_from_directory関数にも渡す必要があります。さらに重要なことに、filename変数の値をパスにするには、接頭辞に 'path:'を付ける必要があります。

ので、最終的なルートは...

@app.route('/<foldername>/<path:filename>') 
def uploaded_file(foldername, filename): 
    return send_from_directory(foldername, filename) 
関連する問題