2009-12-23 10 views
3

Quelqu'un pourrait me donner un pointeur rapide à la façon dont je peux obtenir un gestionnaire OpenRasta qui retourne un tableau d'octets. Être exposé dans ResourceSpace sans qu'il s'agisse d'un objet JSON ou XML. à savoir que je ne veux pas transcodé, je veux juste être en mesure de définir le type de support à « image/PNG » ou similaire.obtenir une image sous forme de tableau de flux ou octets en utilisant OpenRasta

En utilisant ASP.Net MVC, je peux le faire en utilisant un FileContentResult en retournant

File(myByteArray, "image/PNG"); 

J'ai juste besoin de savoir l'équivalent OpenRasta.

Merci

Répondre

10

Vous pouvez simplement retourner un tableau d'octets dans le cadre de votre handlerm, mais qui finira par être servi application/octet-stream.

Si vous voulez retourner les fichiers, vous pouvez simplement retourner une implémentation de IFile.

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

Vous pouvez également définir la propriété FileName pour retourner un nom de fichier spécifique, ce qui rend un en-tête Content-Disposition pour vous.

0

Eh bien il y a quelques codecs Stream là-bas, mais vous pouvez le faire aussi simplement que cette

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

où gestionnaire d'image retourne un tableau d'octets fait à partir d'un objet System.Drawing.Graphics dans mon cas.

Toute autre réponse que faire la lumière sur ce sujet seraient appréciés.

2

Je regardé ce sur la liste de diffusion de OpenRasta et il y avait deux ou trois postes: http://groups.google.com/group/openrasta/browse_thread/thread/5ae2a6d653a7421e# http://groups.google.com/group/openrasta/browse_thread/thread/a631d3629b25b88a#

J'ai va avec l'exemple suivant:

Configuration:

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

Gestionnaire:

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

Cela ne répond pas à votre question spécifique re octet [] mais je suis sûr que vous pouvez transformer un tableau d'octets en un flux via MemoryStream ou quelque chose. –