找回密碼
 註冊
搜索
查看: 351|回復: 0

[教學] flask 圖片上傳說明集錯誤解答IsADirectoryError: [Errno 21] Is a directory

[複製鏈接]
發表於 3 天前 | 顯示全部樓層 |閱讀模式
Push to Facebook
  1. import os
  2. from flask import Flask, request, redirect, url_for
  3. from werkzeug.utils import secure_filename

  4. UPLOAD_FOLDER = 'static/uploads' # Your upload directory
  5. ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}

  6. app = Flask(__name__)
  7. app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

  8. def allowed_file(filename):
  9.     return '.' in filename and \
  10.            filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

  11. @app.route('/upload', methods=['GET', 'POST'])
  12. def upload_file():
  13.     if request.method == 'POST':
  14.         if 'file' not in request.files:
  15.             return redirect(request.url)
  16.         file = request.files['file']
  17.         if file.filename == '':
  18.             return redirect(request.url)
  19.         if file and allowed_file(file.filename):
  20.             filename = secure_filename(file.filename)
  21.             # Corrected line: Join the UPLOAD_FOLDER with the filename
  22.             file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
  23.             return 'File uploaded successfully!'
  24.     return '''
  25.     <!doctype html>
  26.     <title>Upload new File</title>
  27.     <h1>Upload new File</h1>
  28.     <form method=post enctype=multipart/form-data>
  29.       <input type=file name=file>
  30.       <input type=submit value=Upload>
  31.     </form>
  32.     '''

  33. if __name__ == '__main__':
  34.     # Ensure the upload directory exists
  35.     if not os.path.exists(UPLOAD_FOLDER):
  36.         os.makedirs(UPLOAD_FOLDER)
  37.     app.run(debug=True)
複製代碼

關鍵就在這一行:
  1. file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
複製代碼
  • app.config['UPLOAD_FOLDER']提供您指定的上傳目錄的路徑(例如,static/uploads)。
  • 如果是在網域上需要絕對路徑才能上傳,不然無法正常上傳
    1. app.config["IMAGE_UPLOADS"] = os.path.join(os.path.dirname(__file__), 'static/uploads')
    複製代碼

  • filename是上傳文件的安全名稱。
  • os.path.join()正確地將這兩部分結合起來,以建立出檔案應該儲存到的完整絕對路徑,包括檔案的名稱。

其他注意事項:

  • 建立上傳目錄:
    請先確認指定的目錄UPLOAD_FOLDER存在,然後再嘗試將檔案儲存到該目錄。 範例程式碼包含了對該目錄的檢查和建立過程。

  • 安全的檔案名稱:
    始終使用secure_filename()fromwerkzeug.utils來清理檔案名稱並防止目錄遍歷漏洞。


  • 檔案權限:
    請確保您的 Flask 應用程式對該UPLOAD_FOLDER目錄擁有必要的寫入權限。


Flask 在嘗試上傳圖片時出現的錯誤IsADirectoryError: [Errno 21] Is a directory表明,程式正在嘗試對目錄而非檔案執行檔案操作(例如儲存檔案)。 這種情況通常發生在file.save()上傳邏輯部分。


此錯誤最常見的原因是路徑不正確file.save()。 您可能提供了目錄路徑,但需要的是完整的檔案路徑(包括檔案名稱)。



您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

Archiver|手機版|小黑屋|TShopping

GMT+8, 2025-11-22 20:11 , Processed in 0.023145 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回復 返回頂部 返回列表