Hướng dẫn download file in python flask - tải xuống tệp trong bình trăn

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

1 và đường dẫn thư mục tải lên từ thư mục gốc được lưu trữ trong
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.
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
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.
4 is a dictionary that stores a number of variables assigned by Flask itself or by the programmer. The
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

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 (

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

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.

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.
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 http: // localhost: 5000 sẽ hiển thị cho bạn một trang tương tự như hình ảnh dưới đây:http://localhost:5000 will show you a page similar to the below image:

Hướng dẫn download file in python flask - tải xuống tệp trong bình trăn

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

Làm cách nào để tải xuống các tệp từ Flask Python?

Python..
@ứng dụng.tuyến đường ('/tải lên/', phương thức = ['get', 'post']).
Tải lên = HĐH.đường dẫn.tham gia (current_app. root_path, Ứng dụng. config ['upload_folder']).
return send_from_directory (thư mục = tải lên, fileName = fileName).

Làm cách nào để tải xuống nhiều tệp từ bình?

Để cung cấp một số tệp cùng nhau dưới dạng tải xuống, bạn chỉ có tùy chọn nén chúng trong kho lưu trữ.Trong ví dụ của tôi, tất cả các tệp phù hợp với mẫu được chỉ định được liệt kê và nén trong kho lưu trữ zip.Điều này được ghi vào bộ nhớ và được gửi bởi máy chủ.Lưu câu trả lời này.compressing them in an archive. In my example, all files that match the specified pattern are listed and compressed in a zip archive. This is written to the memory and sent by the server. Save this answer.

Làm cách nào để nhận tệp trong API Flask?

Trong phụ trợ API của bạn, bạn sẽ nhận được tệp bằng cách sử dụng File = request.files ['File'].Tên "Tệp" xuất phát từ tên của thẻ đầu vào trong biểu mẫu HTML bạn đang sử dụng để gửi tệp đến phụ trợ của bạn.Trong ví dụ này, phần phụ trợ đang lưu các tệp đã tải lên để tải lên_folder.file = request. files['file'] . The name "file" comes from the name of the input tag in the HTML Form you are using to send the file to your backend. In this example, the backend is saving the uploaded files to UPLOAD_FOLDER .

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 Facture Facture Facture Facture Facture Facture Facture Facture Facture Facture Facture Facture