簡體   English   中英

從 Linux 服務器上的 flask 下載文件時出錯

[英]Error When Downloading Files from flask on Linux Server

我的代碼在我的 windows 機器上完美運行:

@app.route('/downloads/<filename>', methods=["GET", "POST"])
def downloads(filename):
    return send_file(filename, as_attachment=True)

它使用標簽為 html 頁面上的列表中的每個特定項目傳遞變量。 在我的 windows 機器上,我使用反斜杠指定文件名(這是文件的目錄)變量(然后無論出於何種原因在搜索欄中轉換為“%5C”)。 這工作正常,但是當我在我的 linux 機器上運行相同的代碼時,它在瀏覽器上給我一個“內部服務器錯誤”,在服務器上出現這個錯誤。

FileNotFoundError: [Errno 2] No such file or directory: '/home/pi/ss/python_files\\user\\file.py'

現在我明白 Linux 對目錄使用“正斜杠”,而 Windows 出於任何原因使用“反斜杠”,我認為這是錯誤,但是當我嘗試在目錄中使用“正斜杠”時,它給了我一個 404 錯誤瀏覽器:

'未找到服務器上未找到請求的 URL。 如果您手動輸入了 URL,請檢查您的拼寫並重試。

它在服務器上給了我這個:

"GET /downloads/python_files/user/file.py HTTP/1.1" 404 -

這會讓你認為也許我只是有錯誤的文件路徑,但是當我 go 進入與服務器的 python 文件相同的目錄並鍵入:

python3 python_files/user/file.py

它運行文件,所以它的路徑沒有問題......無論如何,這是我被難住並意識到我沒有足夠的知識來修復錯誤的地方。 非常感謝您的幫助!

參考本節https://flask.palletsprojects.com/en/1.1.x/quickstart/#variable-rules

或者,您可以使用轉換器來指定參數的類型,例如<converter:variable_name >

因此,如果您在路由中指定<path:filename>作為轉換器,那應該可以解決您的問題

@app.route('/downloads/<path:filename>', methods=["GET", "POST"])

因為如果沒有明確指定,它默認為string轉換器,它會接受任何沒有斜杠的文本,這就是你得到錯誤的原因

"GET /downloads/python_files/user/file.py HTTP/1.1" 404 -

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM