Tôi đang cố gắng tạo một ứng dụng web với bình cho phép người dùng tải lên tệp và phục vụ chúng cho người dùng khác. Ngay bây giờ, tôi có thể tải tệp lên tải lên chính xác. Nhưng tôi dường như không thể tìm ra cách để người dùng tải lại.
Tôi đang lưu trữ tên của tên tệp vào cơ sở dữ liệu.
Tôi có một chế độ xem phục vụ các đối tượng cơ sở dữ liệu. Tôi cũng có thể xóa chúng.
@app.route['/dashboard', methods=['GET', 'POST']]
def dashboard[]:
problemes = Probleme.query.all[]
if 'user' not in session:
return redirect[url_for['login']]
if request.method == 'POST':
delete = Probleme.query.filter_by[id=request.form['del_button']].first[]
db.session.delete[delete]
db.session.commit[]
return redirect[url_for['dashboard']]
return render_template['dashboard.html', problemes=problemes]
Trong HTML của tôi, tôi có:
Facture
và một chế độ xem tải xuống:
@app.route['/uploads/', methods=['GET', 'POST']]
def download[filename]:
return send_from_directory[directory=app.config['UPLOAD_FOLDER'], filename=filename]
Nhưng nó trở lại:
Không tìm thấy
URL được yêu cầu không được tìm thấy trên máy chủ. Nếu bạn nhập URL theo cách thủ công, vui lòng kiểm tra chính tả của bạn và thử lại.
Tôi chỉ muốn liên kết tên tệp với đối tượng và để người dùng tải xuống [cho mọi đối tượng trong cùng một chế độ xem]
Đội câu trả lời giáo dục
Tải xuống các tệp từ các ứng dụng bình
Flask cho phép tải xuống, giống như các ứng dụng web dựa trên JavaScript.
Có hai thành phần cho quá trình này.
HTML
Cần phải có HTML href
, sẽ gọi hàm Python thích hợp để tải xuống.
File
Python
Thành phần Python sẽ bao gồm một hàm sẽ trả lại tệp cần thiết cho máy khách.
@app.route['/uploads/', methods=['GET', 'POST']]
def download[filename]:
# Appending app path to upload folder path within app root folder
uploads = os.path.join[current_app.root_path, app.config['UPLOAD_FOLDER']]
# Returning file from appended path
return send_from_directory[directory=uploads, filename=filename]
Hàm này lấy tên tệp cần thiết làm đối số. Sau đó, nó sử dụng hàm os
____ ____ ____10 để nối thêm đường dẫn gốc của ứng dụng bình được lưu trữ trong
Facture
1 và đường dẫn thư mục tải lên từ thư mục gốc được lưu trữ trong Facture
2.
3 là bối cảnh ứng dụng. Nó có thể được sử dụng bất cứ nơi nào một bối cảnh ứng dụng đã được thiết lập. Facture
4 là một từ điển lưu trữ một số biến được chỉ định bởi chính bình hoặc bởi lập trình viên. Biến Facture
5 phải được thiết lập bởi người dùng. is the application context. It can be used wherever an application context has been set up. Facture
Facture
4 is a dictionary that
stores a number of variables assigned by Flask itself or by the programmer. The Facture
5 variable has to be set up by the user.Từ đường dẫn được nối thêm, hàm trả về tệp được tìm thấy bởi
Facture
6, lấy đường dẫn thư mục trong tham số đầu tiên và tên tệp trong tham số thứ hai.Hãy nhớ rằng bạn cần có quyền truy cập vào tệp bạn đang tải xuống.
THẺ LIÊN QUAN
Python
bình giữ nhiệt
phát triển web
Bản quyền © 2022 Giáo dục, Inc. Tất cả quyền được bảo lưu
Giới thiệu
Ở đây tôi sẽ hiển thị một ví dụ đơn giản về cách tải xuống một tệp từ ứng dụng web bằng bình Python. Tôi sẽ tải xuống tệp được giữ ở vị trí máy chủ. Tệp có thể thuộc bất kỳ loại tệp nào, tức là, pdf, văn bản, excel, word, v.v. Liên kết một tập tin sẽ được tải xuống. Tệp đã tải xuống sẽ yêu cầu bạn chọn một vị trí tệp để lưu nó.
Có thể có bất kỳ lý do để tải xuống một tập tin từ máy chủ. Lý do có thể là, bạn muốn tạo báo cáo từ cơ sở dữ liệu và tải xuống các báo cáo này.
Điều kiện tiên quyết
Python 3.8.0 - 3.9.7/, Bình 1.1.1 - 2.0.1 [
Facture
7]Bây giờ tôi sẽ tạo ứng dụng web sẽ tải xuống bất kỳ loại tệp nào được giữ ở vị trí máy chủ.
Thư mục dự án
Bước đầu tiên là tạo một thư mục gốc dự án, theo đó tôi sẽ đặt tất cả các tệp cần thiết cho dự án.
Hãy nói rằng tôi sẽ tạo ra một thư mục gốc dự án & NBSP; Python-flask-file tải xuống.python-flask-file-download.
Tôi có thể không đề cập đến thư mục gốc dự án trong các phần tiếp theo trong khi tạo các tệp mới và tôi sẽ cho rằng tôi đang nói về thư mục gốc của dự án.
Cấu hình bình
Tạo bản tập lệnh bên dưới & nbsp; app.py & nbsp; py là phần mở rộng để chỉ ra tập lệnh python] trong đó tôi nhập mô -đun bình. Tệp này nên được tạo theo & nbsp; thư mục root & nbsp; thư mục. Lưu ý cách tôi tạo phiên bản Flask.app.py script [py is the extension to indicate Python script] where I import the flask module. This file should be created under the project root directory. Notice how I create flask instance.
from flask import Flask
app = Flask[__name__]
Cấu hình URL
Tiếp theo tôi sẽ tạo & nbsp; Main.py & nbsp; tập lệnh sẽ xác định tất cả các đường dẫn ARI hoặc hành động để thực hiện các hoạt động nhất định như hiển thị UI và tải xuống tệp từ máy chủ.main.py script that will define all URIs or Action paths for performing certain operations such as rendering the UI and downloading the file from server.
from app import app
from flask import Flask, send_file, render_template
@app.route['/']
def upload_form[]:
return render_template['download.html']
@app.route['/download']
def download_file[]:
#path = "html2pdf.pdf"
#path = "info.xlsx"
path = "simple.docx"
#path = "sample.txt"
return send_file[path, as_attachment=True]
if __name__ == "__main__":
app.run[]
Trong mã nguồn trên, đường dẫn gốc hoặc điểm cuối sẽ chỉ đơn giản là hiển thị giao diện người dùng. UI này chỉ chứa một liên kết để tải xuống một tệp từ máy chủ. Nhấp vào liên kết sẽ yêu cầu người dùng lưu tệp ở vị trí đã chọn.
Điểm cuối
Facture
8 được kêu gọi trên liên kết trên UI và một tệp được gửi đến máy khách hoặc UI. Loại tệp có thể là bất cứ điều gì. Như bạn thấy tôi đã thử nghiệm với bốn loại tệp. Tôi hy vọng ví dụ này cũng sẽ hoạt động với các loại tệp khác.Mẫu UI
Bây giờ hãy tạo tệp & nbsp; download.html & nbsp; file và đặt nó theo & nbsp; mẫu & nbsp; thư mục.
Facture
9 Thư mục là cấu trúc thư mục tiêu chuẩn của ứng dụng web dựa trên bình để đặt các mẫu hoặc HTML hoặc bất kỳ tài nguyên tĩnh - JS, CSS, hình ảnh.download.html file and put it under templates directory. Facture
9 directory is the
standard directory structure of Flask based web application for putting templates or HTMLs or any static resources – js, css, images.
Python Flask File Download Example
Download a file
Download
Lưu ý trong tệp mẫu trên Tôi đang sử dụng Flask EL [ngôn ngữ biểu thức] để đánh giá điểm cuối liên kết.
Kiểm tra ứng dụng
Bây giờ điều hướng đến thư mục gốc của dự án từ công cụ dòng lệnh và thực hiện lệnh & nbsp; ____ 20 hoặc đơn giản là
@app.route['/uploads/', methods=['GET', 'POST']]
def download[filename]:
return send_from_directory[directory=app.config['UPLOAD_FOLDER'], filename=filename]
1 nếu python của bạn có sẵn trên đường dẫn lớp, máy chủ của bạn sẽ bắt đầu trên cổng mặc định & nbsp; ________ 22.Nếu bạn muốn thay đổi cổng thì bạn có thể thay đổi dòng & nbsp; ________ 23 & nbsp; thành & nbsp; ________ 24, trong đó & nbsp;
Trang chủ
Nhấn URL // localhost: 5000 sẽ hiển thị cho bạn một trang tương tự như hình ảnh dưới đây://localhost:5000 will show you a page similar to the below image:
Nhấp vào liên kết tải xuống sẽ yêu cầu bạn lưu tệp theo vị trí đã chọn của bạn.
Mã nguồn
Tải xuống