使用OpenRasta将图像作为流或字节数组获取

时间:2009-12-23 11:38:16

标签: rest openrasta

有人能够给我一个快速指针,告诉我如何获得一个返回字节数组的OpenRasta处理程序。要在ResourceSpace中公开,而不是JSON或XML对象。即我不希望它被转码,我只是希望能够将媒体类型设置为“图像/ PNG”或类似。

使用ASP.Net MVC我可以通过返回

使用FileContentResult来完成
File(myByteArray, "image/PNG");

我只需要知道OpenRasta的等价物。

由于

3 个答案:

答案 0 :(得分:10)

您可以只返回一个字节数组作为处理程序的一部分,但最终将作为application / octet-stream提供。

如果要返回文件,只需返回IFile的实现。

public class MyFileHandler {
  public IFile Get(int id) {
    var mybytes = new byte[];
    return new InMemoryFile(new MemoryStream(mybytes)) {
      ContentType = new MediaType("image/png");
    }
  }
}

您还可以设置FileName属性以返回特定文件名,该文件名将为您呈现Content-Disposition标头。

答案 1 :(得分:2)

我在OpenRasta邮件列表中查看了这个,并且有几个相关的帖子: http://groups.google.com/group/openrasta/browse_thread/thread/5ae2a6d653a7421e# http://groups.google.com/group/openrasta/browse_thread/thread/a631d3629b25b88a#

我已经了解了以下示例:

配置:

ResourceSpace.Has.ResourcesOfType<IFile>()
   .AtUri("/customer/{id}/avatar")
   .HandledBy<CustomerAvatarHandler>();

处理程序:

public class CustomerAvatarHandler
{
    public object Get(int id)
    {
        const string filename = @"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\Sunset.jpg";
        return new InMemoryFile(File.OpenRead(filename));
    }
}

答案 2 :(得分:0)

那里有一些Stream编解码器,但你可以像这样简单地完成它

ResourceSpace.Has.ResourcesOfType<byte[]>()
                .AtUri("/MyImageUri")
                .HandledBy<ImageHandler>();

在这种情况下,Image处理程序返回一个由System.Drawing.Graphics对象生成的字节数组。

任何其他能够更好地阐述这一主题的答案都将受到赞赏。