Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Flask url_用于错误链接到模板外的静态页面_Python_Static_Amazon S3_Flask_Url Routing - Fatal编程技术网

Python Flask url_用于错误链接到模板外的静态页面

Python Flask url_用于错误链接到模板外的静态页面,python,static,amazon-s3,flask,url-routing,Python,Static,Amazon S3,Flask,Url Routing,我目前正在将所有静态文件移动到S3,并允许一些图像上传到我的站点。总的来说,这一切进展得非常顺利。我把所有现有的css和js文件都升级到S3,没有任何麻烦,但是我在上传图像并将它们保存到S3时遇到了一些麻烦 具体来说,这就是我在视图中处理文件上载的方式: image_file = request.files["imageurl"] if image_file and allowed_file(image_file.filename): fn = "products/%s" % secur

我目前正在将所有静态文件移动到S3,并允许一些图像上传到我的站点。总的来说,这一切进展得非常顺利。我把所有现有的css和js文件都升级到S3,没有任何麻烦,但是我在上传图像并将它们保存到S3时遇到了一些麻烦

具体来说,这就是我在视图中处理文件上载的方式:

image_file = request.files["imageurl"]
if image_file and allowed_file(image_file.filename):
    fn = "products/%s" % secure_filename(image_title + "." + image_file.filename.split(".")[-1])
    image_file.save(url_for('static', filename=fn))
else:
    response = app.make_response(render_template(
        'admin/newImage.html',
        title=title,
        error="That Image file is invalid.")
    )
    return response
这一切都包装在一个POST请求处理程序中。这里的问题是('static')的
url\u无法链接到正确的路径,因此每当我尝试保存这样的图像时,就会出现
IOError

通常我会认为我只是在对我的目录结构做一些愚蠢的事情,但是同样的
url\u模式对于我的静态目录中的文件非常有效。有什么办法可以补救吗?这是我的目录结构(为查看而精简)


作为参考,url\u for在
/static/css
中运行良好,并从
admin.py
中链接到错误的url,有什么想法吗?

url\u for
返回url路径。不是文件系统路径

因此,您试图将文件保存在
/static/something
,对于系统来说,这意味着从文件系统的根开始的路径,而不是从应用程序路径开始

您可以使用类似这样的方法为文件创建
静态
路径

static_path_to_save = os.path.join([app.root_path, '/static', fn])
在处理上传时,请记住对所有路径进行清理,并仔细检查目的地。最佳做法适用,如如果使用用户提供的
文件名
,则删除斜杠(最佳做法是生成文件名)

在您的代码中,我还看到了一个问题,如果两个用户上载了一个同名的文件,并相互覆盖。但在您的环境中,这可能是安全的

static_path_to_save = os.path.join([app.root_path, '/static', fn])