【问题标题】:Right click, "save image as" is not working for dynamically generated PIL image (Flask)右键单击,“将图像另存为”不适用于动态生成的 PIL 图像(Flask)
【发布时间】:2013-08-18 05:11:46
【问题描述】:

我有一些 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>

【问题讨论】:

  • 贴出保存图片的代码和Flask路由代码。
  • @Blender 我添加了最相关(我认为)的部分。
  • 这和Flask没什么关系。浏览器版本会更有帮助。
  • @MarkusUnterwaditzer 你是对的。只有 Firefox 有这个问题。我用更多信息更新了我的帖子。

标签: python web flask


【解决方案1】:

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

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

这样,您将提供一个包含图片的页面,并且该页面将被正确保存。当然,最好的解决方案是拥有一个完整的 HTML 页面,而不仅仅是一个 img 标签。所以你可以用渲染的 HTML 模板的返回行替换这个 return 行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 2012-07-28
    • 2021-06-13
    • 1970-01-01
    • 2021-01-25
    • 2020-04-20
    相关资源
    最近更新 更多