2013-08-18 15 views
0

我有一些Python的使用经验,但没有使用Flask或任何Web开发。我尝试在使用Flask的PythonAnywhere上部署我的第一个应用程序。这是一个非常简单的脚本,“桌面”版本可以很好地工作。在网站上,图像正在生成并保存到静态文件夹('/ static /')中的文件中。右键点击“保存图片为”不适用于动态生成的PIL图像(Flask)

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

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上试了一下,“Save page”和“Save image”工作正常。这很奇怪。我打开“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

发布保存图像和Flask路由代码的代码。 – Blender

+0

@Blender我添加了最相关的(我认为)的一部分。 – Jey

+0

这与Flask没有多大关系。浏览器版本会更有帮助。 –

回答

1

因为你重定向URL enc_text到静态图像 - 它可以是怪异的浏览器 - ,为更好的解决您的return行是:

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

这样你服务包含图像的网页,它会正确保存。当然,最好的解决方案是拥有一个完整的HTML页面,而不仅仅是一个img标签。因此,您可以将此return行替换为呈现的HTML模板的返回行。