Web2py:通过动作呼叫或Web服务呼叫提供图像

时间:2013-07-16 03:47:00

标签: python web-services jpeg content-type web2py

我正在使用Web2Py,用户图像是动态的,必须从同一服务器中的不同系统加载,因此无法将它们移动到包含在web2py应用程序目录中。所以我不能拥有相对于图像的路径。符号链接不是一个选项。

我认为解决方案可能是通过动作调用或Web服务提供JPG图像,这样应用程序就可以访问本地文件并以编程方式返回,而无需移动单个图像。例如,视图具有以下代码:

<li class="file ext_jpg">
    <figure class="image_container">
        <img src="controller_name/action_serving_images/unique_id_genereted_for_this_image.jpg" alt="">
    </figure>
</li>

采取行动:

def action_serving_images(image_id)
    #obtain image based on it's unique generated id
    return image

或者服务案例:

<li class="file ext_jpg">
    <figure class="image_container">
        <img src="controller_name/service_serving_images/jpg/image/unique_id_genereted_for_this_image.jpg" alt="">
    </figure>
</li>

获得服务:

def service_serving_images():
    return service()

@service.jpg
def image(image_id):
    #obtain image based on it's unique generated id
    return image
  1. 这些选项中的任何一个都可以吗?
  2. 如何获取图像并将其作为具有正确内容类型的字节流返回,以便浏览器可以正确呈现它?
  3. 在服务的情况下,我是否需要为JPG创建一个特殊的装饰器?怎么样?

1 个答案:

答案 0 :(得分:2)

这比这更容易。

首先你创建一个这样的动作:

def serve_image():
    id = request.args(0)
    filename = get_image_filename_from(id)
    stream = open(filename,'rb')
    return response.stream(stream, attachment=True, filename=filename)

然后在你的观点中你做:

<img src="{{=URL('serve_image',args='1234')}}" />

其中1234是您想要的图像的ID。