Python Apache没有';不要让Flask应用程序创建文件
我正在尝试从一个应用程序到另一个应用程序获取JPEG图像。在我接收到它的地方,流出现在请求的主体上,我尝试再次使文件完整,如下所示:Python Apache没有';不要让Flask应用程序创建文件,python,flask,Python,Flask,我正在尝试从一个应用程序到另一个应用程序获取JPEG图像。在我接收到它的地方,流出现在请求的主体上,我尝试再次使文件完整,如下所示: if r.status_code == 200: f = open(os.path.join(os.path.dirname(os.path.realpath(__file__)) + "\\static\\tmp\\" + filename), 'wb') f.write(r.content) f.close() return T
if r.status_code == 200:
f = open(os.path.join(os.path.dirname(os.path.realpath(__file__)) + "\\static\\tmp\\" + filename), 'wb')
f.write(r.content)
f.close()
return True
在localhost中运行时,这项功能可以正常工作。文件在它的位置,就像我上传它时一样
当我部署所有应用并测试它们时,Apache不允许我执行f=open(…)
,这给了我一个错误:
IOError: [Errno 13] Permission denied: u'/var/www/my_url\\static\\tmp\\2378687.jpeg'
这很奇怪,因为tmp文件夹具有以下属性
unconfined_u:object_r:httpd_sys_rw_content_t:s0
即使不是sudo用户,它也不应该允许我创建新文件吗?您的函数的第一行有一个bug。应该是
f = open(os.path.join(os.path.dirname(os.path.realpath(__file__),
"static", "tmp", filename), 'wb')
Windows和Linux上的目录分隔符不同。这就是为什么它可以在本地工作,但不能在服务器上工作。os
模块是用来提取这些差异的,但实际上您并没有使用它来构造文件名。按照编写代码的方式,os.path.join()
是一个noop
您的代码尝试将名为my\u url\static\tmp\2378687.jpeg
的文件写入目录/var/www/my\u url
此外,您应该为文件路径使用一个,可能是一个可配置的常量,捕捉错误也是一个好主意:
UPLOAD_DIR = '/var/www/my_url/static/tmp'
if r.status_code == 200:
try:
with open(os.path.join(UPLOAD_DIR, filename), 'wb') as f
f.write(r.content)
except IOError as e:
# log e.message or something
return False
return True
在函数的第一行中有一个bug。应该是
f = open(os.path.join(os.path.dirname(os.path.realpath(__file__),
"static", "tmp", filename), 'wb')
Windows和Linux上的目录分隔符不同。这就是为什么它可以在本地工作,但不能在服务器上工作。os
模块是用来提取这些差异的,但实际上您并没有使用它来构造文件名。按照编写代码的方式,os.path.join()
是一个noop
您的代码尝试将名为my\u url\static\tmp\2378687.jpeg
的文件写入目录/var/www/my\u url
此外,您应该为文件路径使用一个,可能是一个可配置的常量,捕捉错误也是一个好主意:
UPLOAD_DIR = '/var/www/my_url/static/tmp'
if r.status_code == 200:
try:
with open(os.path.join(UPLOAD_DIR, filename), 'wb') as f
f.write(r.content)
except IOError as e:
# log e.message or something
return False
return True
\\
。这使您的代码在linux/windows操作系统之间更易于移植
f=open(os.path.join(os.path.dirname(os.path.realpath(\uuuu文件)、“static”、“tmp”、filename)、“wb”)
/var/www/my_url
。请尝试使用绝对路径\\
。这使您的代码在linux/windows操作系统之间更易于移植
f=open(os.path.join(os.path.dirname(os.path.realpath(\uuuu文件)、“static”、“tmp”、filename)、“wb”)
/var/www/my_url
。请尝试使用绝对路径您没有写入tmp文件夹。``不是Linux上的目录分隔符您没有写入tmp文件夹。``不是Linux上的目录分隔符这已经修复了它。我完全忘记了斜杠。虽然文件没有打开,因为它不知怎么被破坏了。但它可能与Apache无关。谢谢您的时间!这是一个文件修正了。我完全忘记了斜杠。虽然文件没有打开,因为它被破坏了。但它可能与Apache无关。谢谢你的时间!尝试捕获异常是个好主意,谢谢你的建议。我不会修正“上传目录”因为我必须更改很多代码,现在就可以了。尝试捕获异常是个好主意,谢谢你的建议。我不会修复“UPLOAD_DIR”,因为我必须更改很多代码,现在就可以了。