2017-01-30 47 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'但在瓶中的映射網址就是'/ FOLDERNAME/filename'這似乎表明右邊鏈接'/ file0wr5ug4y/Screen_Shot_2017-01-25_at_11.23.48_AM.png'(注意:沒有'​​/ uploads')。試試看看它是如何發展的。 –

+0

該文檔說,從tempfile.mkdtemp()返回的值是絕對路徑,我的測試證實這是準確的。前綴已經在變量值中,如果我將前綴添加到路由中,我會在URL中獲得一個雙重前綴。 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

爲什麼不能' app.route('/ uploads//')',然後'返回send_from_directory('/ uploads/{}/{}'。格式(文件夾名,文件名))' –

回答

0

無視最後一個評論的第一個字符串的答覆,試錯法算出來。

文件夾名稱也必須傳遞給send_from_directory函數,更重要的是必須以'path:'作爲前綴以允許文件名變量值爲路徑。

所以最終的路線看起來像......

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