相关疑难解决方法(0)

如何在python中找到文件的mime类型?

假设您想在某处保存一堆文件,例如在BLOB中.假设你想通过网页将这些文件输出,并让客户端自动打开正确的应用程序/查看器.

假设:浏览器通过HTTP响应中的mime-type(content-type?)标头确定要使用的应用程序/查看器.

基于该假设,除了文件的字节外,您还希望保存MIME类型.

您如何找到文件的MIME类型?我目前在Mac上,但这也适用于Windows.

将文件发布到网页时,浏览器是否会添加此信息?

是否有一个整洁的python库来查找这些信息?WebService或(甚至更好)可下载的数据库?

python mime

177
推荐指数
14
解决办法
15万
查看次数

Flask send_file 不发送文件

我正在使用 Flasksend_file()来让人们从服务器下载文件。

我目前的代码如下:

@app.route('/', methods=["GET", "POST"])
def index():
    if request.method == "POST":
        link = request.form.get('Link')
        with youtube_dl.YoutubeDL(ydl_opts) as ydl:
            info_dict = ydl.extract_info(link, download=False)
            video_url = info_dict.get("url", None)
            video_id = info_dict.get("id", None)
            video_title = info_dict.get('title', None)
            ydl.download([link])
        print("sending file...")
        send_file("dl/"+video_title+".f137.mp4", as_attachment=True)
        print("file sent, deleting...")
        os.remove("dl/"+video_title+".f137.mp4")
        print("done.")
        return render_template("index.html", message="Success!")
    else:
        return render_template("index.html", message=message)
Run Code Online (Sandbox Code Playgroud)

.f137.mp4添加的唯一原因是因为我使用 AWS C9 作为我的在线 IDE,并且我无法安装 FFMPEG 来在 Amazon Linux 上组合音频和视频。然而,这不是问题。问题是它没有发送下载请求。

这是控制台输出:

127.0.0.1 - - [12/Dec/2018 16:17:41] "POST / HTTP/1.1" 200 -
[youtube] 2AYgi2wsdkE: Downloading …
Run Code Online (Sandbox Code Playgroud)

python ffmpeg flask youtube-dl

12
推荐指数
1
解决办法
2万
查看次数

如何在Flask send_file()或send_from_directory()之后运行代码

我有一个基于Flask的网站,用户可以下载一些PDF文件.

这很容易使用Flask send_file()send_from_directory().

例如:

@app.route('/downloadreport')
def download_report():
    return send_from_directory(
        '/reports', 
        'my_report.pdf', 
        as_attachment=True)
Run Code Online (Sandbox Code Playgroud)

我想在下载完成后执行一些逻辑(让我们称之为after_download()).

我试过使用@after_this_request钩子.但它看起来像是send_file()异步运行,因此@after_this_request可能会在下载文件之前触发.

  • 例如,如果文件非常大,下载可能需要一段时间,因此@after_this_request在下载文件时似乎会触发.
  • 它从文档中看起来像send_file()使用WSGI的文件包装器来实现下载......也许这就是为什么它以异步方式运行?

有没有一种方法来调用after_download(),这样它保证后运行send_file()完成的文件发送到用户?

python download werkzeug flask

9
推荐指数
1
解决办法
3335
查看次数

Flask服务后删除文件

我有一个Flask视图,它生成数据并将其保存为带有Pandas的CSV文件,然后显示数据.第二个视图用于生成的文件.我想在下载后删除该文件.我当前的代码引发了权限错误,可能是因为after_request在文件提供之前删除了该文件send_from_directory.如何在提供文件后删除文件?

def process_data(data)
    tempname = str(uuid4()) + '.csv'
    data['text'].to_csv('samo/static/temp/{}'.format(tempname))
    return file

@projects.route('/getcsv/<file>')
def getcsv(file):
    @after_this_request
    def cleanup(response):
        os.remove('samo/static/temp/' + file)
        return response

    return send_from_directory(directory=cwd + '/samo/static/temp/', filename=file, as_attachment=True)
Run Code Online (Sandbox Code Playgroud)

python csv flask

8
推荐指数
1
解决办法
4678
查看次数

如何动态生成文件并在下载后删除?

这是我的功能,即动创建文件(当用户点击正确的链接时)

@app.route('/survey/<survey_id>/report')
def survey_downloadreport(survey_id):
    survey, bsonobj = survey_get(survey_id) #get object
    resps = response_get_multi(survey_id) #get responses to the object

    fields = ["_id", "sid", "date", "user_ip"] #meta-fields
    fields.extend(survey.formfields) #survey-specific fields

    randname = "".join(random.sample(string.letters + string.digits, 15)) + ".csv" #some random file name

    with open("static//" + randname, "wb") as csvf:
        wr = csv.DictWriter(csvf, fields, encoding = 'cp949')
        wr.writerow(dict(zip(fields, fields))) #dummy, to explain what each column means
        for resp in resps :
            wr.writerow(resp)

    return send_from_directory("static", randname, as_attachment = True)
Run Code Online (Sandbox Code Playgroud)

我想在完成下载后删除文件.我该怎么做?

python flask

7
推荐指数
1
解决办法
4704
查看次数

烧瓶:`@after_this_request` 不工作

我想在用户下载由 Flask 应用程序创建的文件后删除一个文件。

为此,我在 SO 上找到了这个答案,它没有按预期工作,并引发了一个after_this_request未定义的错误。

因此,我更深入地研究了Flask 的文档,其中提供了有关如何使用该方法的示例片段。因此,我通过定义after_this_request示例代码段中所示的函数来扩展我的代码。

执行代码resp。运行服务器按预期工作。但是,该文件没有被删除,因为@after_this_request没有被调用,这很明显,因为After request ...它没有打印到终端中 Flask 的输出:

#!/usr/bin/env python3
# coding: utf-8


import os
from operator import itemgetter
from flask import Flask, request, redirect, url_for, send_from_directory, g
from werkzeug.utils import secure_filename

UPLOAD_FOLDER = '.'
ALLOWED_EXTENSIONS = set(['csv', 'xlsx', 'xls'])

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


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


def …
Run Code Online (Sandbox Code Playgroud)

python request delete-file flask python-3.x

2
推荐指数
2
解决办法
5994
查看次数