20

NancyFXのデータベースからWeb出力ストリームにbyte[]から画像を出力するのに苦労しています。この時点で表示するのに十分なサンプルコードがありません。誰かがこの問題に取り組み、スニペットを投稿できるかどうか疑問に思っていましたか?基本的には、データベースに保存されているバイト配列からimage / jpegを返し、物理ファイルではなくWebに出力したいだけです。

4

3 に答える 3

30

@TheCodeJunkieの答えに基づいて構築するために、次のように「バイト配列応答」を非常に簡単に構築できます。

public class ByteArrayResponse : Response
{
    /// <summary>
    /// Byte array response
    /// </summary>
    /// <param name="body">Byte array to be the body of the response</param>
    /// <param name="contentType">Content type to use</param>
    public ByteArrayResponse(byte[] body, string contentType = null)
    {
        this.ContentType = contentType ?? "application/octet-stream";

        this.Contents = stream =>
            {
                using (var writer = new BinaryWriter(stream))
                {
                    writer.Write(body);
                }
            };
    }
}

次に、Response.AsX構文を使用する場合は、その上に単純な拡張メソッドがあります。

public static class Extensions
{
    public static Response FromByteArray(this IResponseFormatter formatter, byte[] body, string contentType = null)
    {
        return new ByteArrayResponse(body, contentType);
    }
}

次に、ルートで次を使用できます。

Response.FromByteArray(myImageByteArray, "image/jpeg");

コンテントネゴシエーションでバイト配列を使用するプロセッサを追加することもできます。この要点にその簡単なサンプルを追加しました

于 2013-01-23T08:14:09.513 に答える
12

コントローラで、画像のバイトストリームを含むResponse.FromStreamを返します。以前のバージョンのナンシーではAsStreamと呼ばれていました。

Get["/Image/{ImageID}"] = parameters =>
{
     string ContentType = "image/jpg";
     Stream stream = // get a stream from the image.

     return Response.FromStream(stream, ContentType);
};
于 2015-02-20T07:43:56.920 に答える
8

Responseナンシーから、新しいオブジェクトを返すことができます。Contentプロパティは型であるAction<Stream>ため、バイト配列をそのストリームに書き込むデリゲートを作成するだけです。

var r = new Response();
r.Content = s => {
   //write to s
};

ContentTypeプロパティを設定することを忘れないでください(MimeTypes.GetMimeType拡張子を含む名前を使用して渡すことができます)別のコンストラクターStreamResponseを継承して提供するもあります(ルートでResponse使用できる少し良い構文のために..構文だけreturn Response.AsStream(..)キャンディー)

于 2013-01-23T06:52:54.777 に答える