python - flask 上传的文件只能放在项目的根目录下么?
巴扎黑
巴扎黑 2017-04-17 17:24:45
[Python讨论组]

用flask做的后台,在尝试上传文件的时候,若是 UPLOAD_FOLDER = 'tmp'这么配置(tmp 是文件根目录下的一个文件夹),是可以成功上传的,但是在读取这个文件的时候,路径怎么写都不对,当我把 tmp这个文件夹移到static下之后就可以顺利的通过路径找到,但是这样就无法上传了,若是把配置改为UPLOAD_FOLDER = 'static/tmp/'上传就会报错,找不到这个路径,简直郁闷死了。在项目根目录下的文件要怎么写路径才能找到呢,又或者怎么才能把保存文件的路径改为'static/tmp/'呢??flask新手一枚,实在不懂,求大神告知。

补充一下我的代码:

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

@app.route('/', methods=['POST'])
def upload_file():
    file = request.files['file']
    filename = secure_filename(file.filename)
    file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
    return 'upload success'
    

目录结构是这样的:

project
    --app
        --static
        --templates
        --__init__.py
        --其他文件...
    --tmp
    --config.py
    --run.py

目录结构大概就是这个样子的,这种情况下文件是可以上传到tmp文件夹里的,但是没法通过路径读出来(可能是我不会写,试了很多种写法都不对!- -),如果把tmp文件夹移到static目录下,就可以找到,但是这样就无法上传了,把配置文件改成app.config['UPLOAD_FOLDER'] = 'static/tmp/'就会报错。

巴扎黑
巴扎黑

全部回复(3)
巴扎黑

Flask资源定位是依靠

app = Flask(__name__)

__name__参数(文件名或包名),所以相对定位一定要基于这个文件路径。为什么会在static文件夹路径下会正确?Flask默认静态文件在static文件下。可以参考Flask API文档,有详细说明。


http://stackoverflow.com/questions/15044094/flask-static-files-in-subdirectories 可以解决问题

另外static中文件的访问方式是:

url_for('static', filename='/tmp/'+u'文件名')

如果temp不在static文件夹下这种情况是可以的。
app.config['UPLOAD_FOLDER'] = '/tmp/' 试一试。
之前的static访问方式我写错了,不好意思

PHP中文网

可能是要绝对路径,你设置tmp有可能是因为系统根目录下有个tmp,即/tmp,所以可以上传成功,而你在项目目录下不存在tmp文件夹,所以读取相对路径project/tmp是不存在的。就像找不到绝对路径/static/tmp,我猜是这样,就是说配置路径是绝对路径。

巴扎黑

楼主,我遇到了一样一样的问题啊,你怎么解决的?求指导。我是用flask的。上传图片到static的../../upload/目录,然后在html里面不知道<img src="这里怎么写啊">

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号