使用 OpenRasta 以流或字节数组形式获取图像

发布于 2024-08-16 02:34:24 字数 290 浏览 6 评论 0原文

任何人都可以给我一个关于如何获得返回字节数组的 OpenRasta 处理程序的快速指示。在 ResourceSpace 中公开,而不是 JSON 或 XML 对象。即我不想对其进行转码,我只是希望能够将媒体类型设置为“image/PNG”或类似类型。

使用 ASP.Net MVC,我可以使用 FileContentResult 通过返回来完成此操作,

File(myByteArray, "image/PNG");

我只需要知道 OpenRasta 等效项。

谢谢

Would anyone be able to give me a quick pointer as to how I can get an OpenRasta handler that returns a byte array. To be exposed in the ResourceSpace without it being a JSON or XML object. i.e. I don't want it transcoded, I just want to be able to set the media type to "image/PNG" or similar.

Using ASP.Net MVC I can do it using a FileContentResult by returning

File(myByteArray, "image/PNG");

I just need to know the OpenRasta equivalent.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

记忆消瘦 2024-08-23 02:34:24

您可以只返回一个字节数组作为处理程序的一部分,但这最终将被用作应用程序/八位字节流。

如果你想返回文件,你可以简单地返回 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 标头。

You can just return a byte array as part of your handlerm but that will end up being served as application/octet-stream.

If you want to return files, you can simply return an implementation of IFile.

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

You can also set the FileName property to return a specific filename, which will render a Content-Disposition header for you.

那些过往 2024-08-23 02:34:24

我在 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));
    }
}

I looked this up on the OpenRasta mailing list and there were a couple of related posts:
http://groups.google.com/group/openrasta/browse_thread/thread/5ae2a6d653a7421e#
http://groups.google.com/group/openrasta/browse_thread/thread/a631d3629b25b88a#

I have got it going with the following sample:

Configuration:

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

Handler:

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));
    }
}
〗斷ホ乔殘χμё〖 2024-08-23 02:34:24

好吧,有一些 Stream 编解码器,但您可以像这样简单地执行此操作,

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

在我的例子中,图像处理程序返回由 System.Drawing.Graphics 对象组成的字节数组。

任何其他能够进一步阐明该主题的答案将不胜感激。

Well there are some Stream codecs out there, but you can do it as simply as this

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

where Image handler returns a byte array made from a System.Drawing.Graphics object in my case.

Any other answers that shed more light on this topic would be appreciated.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文