右键单击“将图像另存为”不适用于动态生成的PIL图像(Flask)

时间:2013-08-18 05:11:46

标签: python web flask

我有一些使用Python的经验,但没有使用Flask或任何Web开发。我尝试使用Flask在PythonAnywhere上部署我的第一个应用程序。这是一个非常简单的脚本,“桌面”版本运行得非常好。在网站上,正在生成图像并将其保存到静态文件夹('/ static /').

中的文件中

我希望脚本在生成后自动向用户显示图片。最重要的是用户必须能够保存它。但是,当我尝试:

return redirect("http://www.example.com/static/image.png")

图像正确显示,可以使用“将页面另存为”正确保存。但是,当我右键单击图像并单击“将图像另存为”时,它写入的文件已损坏。它甚至不是图像(文件大小更大)。文件名也是错误的。而不是“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上试过它,“保存页面”和“保存图像”都可以正常工作。那真是怪了。我使用记事本打开了“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>

1 个答案:

答案 0 :(得分:1)

因为您正在将enc_text网址重定向到静态图片 - 对于浏览器来说可能很奇怪 - 对您的return行更好的解决方案是:

return '<img src="http://www.mysite.com/static/image.png">'

这样您就可以投放包含图片的页面,并且可以正确保存。当然,最好的解决方案是使完整的HTML页面不仅仅是img标记。因此,您可以使用呈现的HTML模板的返回行替换此return行。