TypeError使用烧瓶从表单中读取pdf


我需要一些帮助。我想给我从表单传递的pdf文件加水印。然后我遇到了";TypeError:应为str、字节或os。PathLike对象,而不是FileStorage";错误

这是我的上传文件.html

<form action="/upload_file" method="POST" enctype = "multipart/form-data">
<input type="file" name="file">
<input type="submit">
</form>

这是我的测试瓶

@app.route('/upload_file', methods=['POST'])
def upload_file():
pdf_file = request.files['file']
watermark = "watermark.pdf"
merged_file = "merged.pdf"
input_file = open(pdf_file,'rb')
input_pdf = PyPDF2.PdfFileReader(input_file)
watermark_file = open(watermark,'rb')
watermark_pdf = PyPDF2.PdfFileReader(watermark_file)
pdf_page = input_pdf.getPage(0)
watermark_page = watermark_pdf.getPage(0)
pdf_page.mergePage(watermark_page)
output = PyPDF2.PdfFileWriter()
output.addPage(pdf_page)
merged_file = open(merged_file,'wb')
output.write(merged_file)
merged_file.close()
watermark_file.close()
input_file.close()
return "Success"

回溯:

Traceback (most recent call last):
File "C:UsersUserAppDataLocalProgramsPythonPython39Libsite- 
packagesflaskapp.py", line 2088, in __call__
return self.wsgi_app(environ, start_response)
File "C:UsersUserAppDataLocalProgramsPythonPython39Libsite- 
packagesflaskapp.py", line 2073, in wsgi_app
response = self.handle_exception(e)
File "C:UsersUserAppDataLocalProgramsPythonPython39Libsite- 
packagesflaskapp.py", line 2070, in wsgi_app
response = self.full_dispatch_request()
File "C:UsersUserAppDataLocalProgramsPythonPython39Libsite- 
packagesflaskapp.py", line 1515, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:UsersUserAppDataLocalProgramsPythonPython39Libsite- 
packagesflaskapp.py", line 1513, in full_dispatch_request
rv = self.dispatch_request()
File "C:UsersUserAppDataLocalProgramsPythonPython39Libsite- 
packagesflaskapp.py", line 1499, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint]) 
(**req.view_args)
File "C:UsersUserDesktopabctest.py", line 51, in upload_file
input_file = open(pdf_file,'rb')
TypeError: expected str, bytes or os.PathLike object, not FileStorage

request.files["name"]可以直接用作类似的文件,因此不需要open()it

此外,您可能希望只让临时文件写入io.BytesIO(),或者用类似uuid.uuid4()的名称命名每个文件,这样多个客户端就不会发生冲突。

最新更新