在使用flask下载文件时会出现的一个文件下载不到的问题

from flask import send_from_directory
@app.route(‘/uploads/<filename>‘)
def uploaded_file(filename):
    return send_from_directory(app.config[‘UPLOAD_FOLDER‘],
                               filename)
                               
genericpath.py 如果系统安装了这个组件的话:
会替换系统自带的path功能,导致,path失效了。最终会找不到文件。
代码只有这样简短的几句话而已。就是这个os.path.isfile会有问题。所以,放在uploaded_file中来完成这个动作,就可以了
"""
filename = safe_join(directory, filename)
if not os.path.isfile(filename):
    raise NotFound()
options.setdefault(‘conditional‘, True)
return send_file(filename, **options)             
最终的代码类似于这个样子:
#filename = flask.safe_join(UPLOAD_FOLDER, filename)
print(flask.safe_join(UPLOAD_FOLDERS,secure_filename(filename)))
print(os.path.isfile(filename))
return flask.send_file(flask.safe_join(UPLOAD_FOLDERS,secure_filename(filename)),as_attachment=True)

从现象上看,好像是genericpath.py将python自己带的path这个类重写了,导致所有对path的操作,都指向了genericpath这个里面,这个类的处理又和系统自带的有些不太一样,所以会导致相同的方法返回值完全不同的情况,

比如:os.path.isfile这个方法执行时,同样的一个文件,会得出不同的结果。

时间: 2024-10-06 12:33:59

在使用flask下载文件时会出现的一个文件下载不到的问题的相关文章

flask下载文件中文名乱码终极解决方案python3版本

flask(0.11.2)+python3.6 兼容各个主流浏览器,已经过各种测试(chrome,firefox,safari,IE,Edge) quote是将文件名urlencode化,然后以适应Edge浏览器 from urllib.parse import quote # for python3 # from urllib import quote for python2 @app.route('/file/download/<filename>', methods=['GET']) d

DEDE在下载文件时会生成table

当我们在系统内容模型中添加附件类型字段时,前台需要用{dede:field name='字段名'/}来调用. 例如我在后台发布一篇文章,上传一个zip的附件,字段的时间内容是:'/uploads/soft/100602/1-100602212355.doc',而前台则显示下面的内容. <table width='300'> <tr> <td height='30' width='20'><a href='/uploads/soft/100602/1-1006022

Delphi用TActionList下载文件

TActionList有个标准动作TDownLoadURL,内部是使用的URLDownloadToFile,它下载文件时会定时产生OnDownloadProgress 事件,这样就可以用进度条显示: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 uses   Windows,

文件下载(解决下载文件文件名乱码)

不同浏览器下载文件时会出现文件名乱码问题,根据请求浏览器类型处理文件名.

Android从网络某个地址下载文件、写入SD卡

首先创建一个HttpDownloader类,获取下载文件的网络地址,将文件下载下来以String流的方式返回: public String download(String urlStr){ //urlStr为文件的网络地址,如http://192.168.1.105:8080/mp3/resources.xml StringBuffer sb = new StringBuffer(); String line = null; BufferedReader buffer = null; try {

向云服务器上传下载文件方法汇总(转)

转载于:https://yq.aliyun.com/articles/64700 摘要: 一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌面的时候,点"选项>>" 2."本地资源"-->详细信息. 3."磁盘驱动器"前面打钩. 一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌

使用多线程下载文件思路

01 开启多条线程,每条线程都只下载文件的一部分(通过设置请求头中的Range来实现) 02 创建一个和需要下载文件大小一致的文件,判断当前是那个线程,根据当前的线程来判断下载的数据应该写入到文件中的哪个位置.(假设开5条线程来下载10M的文件,那么线程1下载0-2M,线程2下载2-4M一次类推,当接收到服务器返回的数据之后应该先判断当前线程是哪个线程,假如当前线程是线程2,那么在写数据的时候就从文件的2M位置开始写入) 03 代码相关:使用NSFileHandle这个类的seekToFileO

多线程实现下载文件

一:需求分析 1:下载远程资源文件,通过多线程下载,达到高效的目的. 2:使用5个线程分别下载文件的不同部分. 二:定义成员变量以及初始化变量 1 // 定义成员变量 2 private String path; // 远程资源路径 3 private String targetPath; // 本地存储路径 4 private DownFileThread[] threads; // 线程list 5 private int threadNum; // 线程数量 6 private long

经验分享] 向云服务器上传下载文件方法汇总

一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌面的时候,点"选项>>" <ignore_js_op> 2."本地资源"-->详细信息. <ignore_js_op> 3."磁盘驱动器"前面打钩. <ignore_js_op> 4.连接远程电脑后,打开"我的电脑",就能看到刚刚共享的硬盘驱动器.把