我对Python有一些经验,但对Flask或任何web开发都没有经验。我尝试使用Flask在PythonAnywhere上部署我的第一个应用程序。这是一个非常简单的脚本,"桌面"版本运行得非常好。在网站上,图像正在生成并保存到静态文件夹("/static/")中的文件中。
我希望脚本在生成后自动向用户显示图片。最重要的是用户必须能够保存它。然而,当我尝试时:
return redirect("http://www.example.com/static/image.png")
图像正在正确显示,并且可以使用"将页面另存为"正确保存。但是,当我右键单击图像并单击"将图像另存为"时,它写入的文件已损坏。它甚至不是图像(文件大小要大得多)。文件名也错误。它将其保存为"enc_text.png"("enc_text"是我的脚本中函数的名称。
如何让"保存图像"工作?
(我不希望有一个解决方案将图像嵌入空白HTML页面(例如img src="…")
非常感谢您的帮助。
编辑
@app.route('/enc_text', methods=['POST'])
def enc_text():
text = request.form['text']
text = unidecode.unidecode(text)
filepath = os.path.join(app.config['UPLOAD_FOLDER'],'steg','enc')
filename = 'image.txt'
targetname = filename.rsplit('.', 1)[0] + '.png'
target = os.path.join(app.config['UPLOAD_FOLDER'],'steg','enc',targetname)
steg.encode(text, target) #Reads text and returns PNG file
return redirect("http://www.mysite.com/static/image.png")
(注意:steg.encode是我写的一个函数)
编辑
这似乎只是Firefox(23.0.1)的问题。即使我在安全模式下重新启动Firefox,这个问题仍然存在。我在IE、Chrome和Safari上试用过,"保存页面"one_answers"保存图像"都很好。这很奇怪。我用记事本打开了"enc_text.png",它包含以下HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>405 Method Not Allowed</title>
<h1>Method Not Allowed</h1>
<p>The method is not allowed for the requested URL.</p>
因为您正在将enc_text URL重定向到静态图像-这对浏览器来说可能很奇怪-所以return
行的更好解决方案是:
return '<img src="http://www.mysite.com/static/image.png">'
通过这种方式,您提供的页面包含一个图像,它将被正确保存。当然,最好的解决方案是拥有一个完整的HTML页面,而不仅仅是一个img
标记。因此,您可以将return
行替换为呈现的HTML模板的返回行。