Получить изображение в виде потока или байтового массива с помощью OpenRasta - PullRequest
3 голосов
/ 23 декабря 2009

Кто-нибудь сможет дать мне быстрый указатель на то, как я могу получить обработчик OpenRasta, который возвращает байтовый массив. Чтобы быть представленным в ResourceSpace, не являясь объектом JSON или XML. то есть я не хочу, чтобы это было перекодировано, я просто хочу иметь возможность установить тип носителя в "image / PNG" или подобный.

Используя ASP.Net MVC, я могу сделать это с помощью FileContentResult, вернув

File(myByteArray, "image/PNG");

Мне просто нужно знать эквивалент OpenRasta.

Спасибо

Ответы [ 3 ]

10 голосов
/ 23 декабря 2009

Вы можете просто вернуть байтовый массив как часть вашего обработчика, но в итоге он будет использоваться как 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 для вас.

2 голосов
/ 23 декабря 2009

Я посмотрел это в списке рассылки 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));
    }
}
0 голосов
/ 23 декабря 2009

Ну, есть несколько потоковых кодеков, но вы можете сделать это так просто, как этот

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

где обработчик Image возвращает байтовый массив, созданный из объекта System.Drawing.Graphics в моем случае.

Буду признателен за любые другие ответы, которые проливают больше света на эту тему.

...