我做了烧瓶功能来给pdf文件加水印:
@app.route('/upload_file', methods=['POST'])
def upload_file():
pdf_file = request.files['file']
watermark = "watermark.pdf"
merged_file = "merged.pdf"
input_pdf = PyPDF2.PdfFileReader(pdf_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()
pdf_file.close()
return redirect(url_for("encrypt", file=merged_file))
如何将 'merged_file' 变量传递给 Flask 中的另一个函数?
我想让带水印的pdf文件进入另一个函数进行加解密。功能如下:
@app.route("/<file>")
def encrypt(file):
key = Fernet.generate_key()
file = open('key.key', 'wb')
file.write(key)
file.close()
file = open('key.key', 'rb')
key = file.read()
file.close()
# with open ('mykey.key', 'wb') as mykey:
# mykey.write(key)
# with open('mykey.key', 'rb') as mykey:
# key = mykey.read()
# print(key)
with open({file}, 'rb') as original_file:
original = original_file.read()
f = Fernet(key)
encrypted = f.encrypt(original)
with open('test1.pdf', 'wb') as encrypted_file:
encrypted_file.write(encrypted)
f = Fernet(key)
with open('test1.pdf', 'rb') as encrypted_file:
encrypted = encrypted_file.read()
decrypted = f.decrypt(encrypted)
with open('test2.pdf', 'wb') as decrypted_file:
decrypted_file.write(decrypted)
return "Success encrypt"
追溯:
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 2088, in __call__
return self.wsgi_app(environ, start_response)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 2073, in wsgi_app
response = self.handle_exception(e)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 2070, in wsgi_app
response = self.full_dispatch_request()
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1515, in full_dispatch_request
rv = self.handle_user_exception(e)
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1513, in full_dispatch_request
rv = self.dispatch_request()
File "C:\Users\User\AppData\Local\Programs\Python\Python39\Lib\site-packages\flask\app.py", line 1499, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File "C:\Users\User\Desktop\abc\test.py", line 98, in encrypt
with open({file}, 'rb') as original_file:
TypeError: expected str, bytes or os.PathLike object, not set
我应该在第 98 行的 {file} 处替换什么?请帮忙。谢谢
答案 0 :(得分:0)
名称 file
是您在第 6 行中打开的文件对象,因此我更改了变量名称,
试试这个:
@app.route("/<file>")
def encrypt(file):
key = Fernet.generate_key()
file1 = open('key.key', 'wb')
file1.write(key)
file1.close()
file2 = open('key.key', 'rb')
key = file2.read()
file2.close()
# with open ('mykey.key', 'wb') as mykey:
# mykey.write(key)
# with open('mykey.key', 'rb') as mykey:
# key = mykey.read()
# print(key)
with open(str(file), 'rb') as original_file:
original = original_file.read()
f = Fernet(key)
encrypted = f.encrypt(original)
with open('test1.pdf', 'wb') as encrypted_file:
encrypted_file.write(encrypted)
f = Fernet(key)
with open('test1.pdf', 'rb') as encrypted_file:
encrypted = encrypted_file.read()
decrypted = f.decrypt(encrypted)
with open('test2.pdf', 'wb') as decrypted_file:
decrypted_file.write(decrypted)
return "Success encrypt"