python - 在 python 烧瓶之间传递文件
问题描述
我已将带水印的 pdf 传递给 encrypt() 函数。从 encrypt() 函数,我想将 pdf 传递给另一个名为 emel() 的函数,该函数将电子邮件发送给接收者。
水印编码:
@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.pdf"))
加密()函数:
@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 redirect(url_for("emel", final_file=decrypted_file))
我设法成功地将 pdf 从 upload_file() 传输到 encrypt()。现在我想从 encrypt() 转移到 emel()。
埃梅尔():
@app.route("/<final_file>")
def emel(final_file):
email_user = "email@gmail.com"
email_send = "email@gmail.com"
subject = 'Python!'
msg = MIMEMultipart()
msg['From'] = email_user
msg['To'] = email_send
msg['Subject'] = subject
body = 'Hi there, sending this email from Python!'
msg.attach(MIMEText(body, 'plain'))
filename = final_file
attachment = open(filename,'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment; filename= "+filename)
msg.attach(part)
text = msg.as_string()
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email_user, "password")
server.sendmail(email_user, email_send, text)
server.quit()
return "Success send email"
追溯:
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 103, in encrypt
with open(str(file), 'rb') as original_file:
OSError: [Errno 22] Invalid argument: "<_io.BufferedWriter name='test2.pdf'>"
请帮忙。谢谢
编辑。找到了解决方案
不应该/upload_file/<file>
只是<file>
解决方案
推荐阅读
- python - Pandas:需要删除包含字符串的行。但是我的情况不起作用
- javascript - 无法从函数返回
- java - 如何使用查询结果显示 Toast 消息并在 Firebase Firestore 中创建新用户?
- android - 自定义标记不聚类
- reactjs - /static/js 文件夹来自哪里?
- php - 如何验证多个文件上传字段编辑默认 Voyager BREAD 控制器中的“validateBread”方法
- bridge.net - 使用 Bridge.NET 时遇到的承诺
- logging - 尝试获取 Google 表格日志
- python - pytest 请求在测试中使用的夹具参数
- sql - 2表中的数据插入