现在在开发一个网站,获取客户表单上传的 docx 文件,然后通过 libreoffice 转换成 pdf。 现在测试发现如果多个用户同时上传文件,libreoffice 可以正常转换(在后台已经看到转换后的 pdf 文件),但是总有一个或几个用户返回 FileNotFoundError: [Errno 2] No such file or directory 错误,使用 redis 做消息队列仍然不能解决,求教原因?
相关代码如下:
upload_path = os.path.join(parentdir, 'static/Upload_Files/BeforeSwitchFile/', new_filename)
print_file.save(upload_path)
# 将数据添加到列表中
switch = q.enqueue_call(switch_topdf(upload_path))
if switch.func_name == 'success':
i = new_filename.rindex('.')
new_filename = new_filename[:i] + '.pdf'
switched_dir = os.path.join(parentdir, 'static/Upload_Files',
secure_filename(new_filename)) # 转换 pdf 后的文件路径
# 读取文件页数
pageCount = read_pdf_pages(switched_dir)
cost = pageCount * print_cost +0.2
switch_topdf 函数代码
def switch_topdf(filename):
cmd = "soffice --headless --convert-to pdf:writer_pdf_Export {} --outdir {}".format(filename, FileSaveDir) # libreoffice 转换命令
print(cmd)
try:
returnCode = subprocess.call(cmd, shell=True)
# returnCode = os.system(cmd)
if returnCode != 0:
raise IOError("{} failed to switch".format(filename))
except Exception:
return 'error'
else:
return 'success'
1
bakabie 2019-08-12 04:39:17 +08:00 via Android
会不会是因为 secure_filename 处理后的文件路径找不到的原因?
|