对不起,我不熟悉使用 Flask 进行路由和重定向。我做了 3 个函数 upload_file()
、encrypt()
、emel()
。 upload_file()
是将文件从表单传递给函数以获得水印。 encrypt()
将文件从 upload_file()
传递给函数以进行加密和解密。 emel()
正在传递来自 encrypt()
的解密文件以向接收者发送电子邮件。
upload_file()
:
@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"))
encrypt()
:
@app.route("/<file>")
def encrypt(file):
print(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(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", decrypted_file='test2.pdf'))
在 encrypt()
中,例如当 i return "Success"
时,它会返回成功。但是当我 return redirect(url_for("emel", decrypted_file='test2.pdf'))
时,我收到错误 File "C:\Users\User\Desktop\abc\test.py", line 104, in encrypt with open(file, 'rb') as original_file: FileNotFoundError: [Errno 2] No such file or directory: 'favicon.ico'
。我想我设法将文件从 upload_file()
传递到 encrypt()
。但是当我将文件重定向到另一个函数时,我收到错误
emel()
:
@app.route("/<decrypted_file>")
def emel(decrypted_file):
email_user = "gmail@gmail.com"
email_send = "gmail2@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 = decrypted_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"
我想将文件从 encrypt()
传递到 emel()
。请帮我。帮助将不胜感激。谢谢..