Non riesco a stampare un'immagine da byte [] dal mio database in NancyFX a un flusso di output Web. Non ho codice di esempio abbastanza vicino da poterlo mostrare anche a questo punto. Mi stavo chiedendo se qualcuno ha affrontato questo problema e potrebbe pubblicare uno snippet? Fondamentalmente voglio solo restituire l'immagine/jpeg da una matrice di byte memorizzata nel mio database e metterla sul web piuttosto che su un file fisico.Come creare un gestore di immagini in NancyFx
risposta
giusto per costruire su @ risposta di TheCodeJunkie, si può costruire una "risposta di array di byte" molto facilmente in questo modo:
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);
}
};
}
}
Poi, se si desidera utilizzare la sintassi Response.AsX è un metodo semplice estensione sulla parte superiore:
public static class Extensions
{
public static Response FromByteArray(this IResponseFormatter formatter, byte[] body, string contentType = null)
{
return new ByteArrayResponse(body, contentType);
}
}
Poi, nel tuo percorso si può semplicemente utilizzare:
Response.FromByteArray(myImageByteArray, "image/jpeg");
È potrebbe anche aggiungere un processore per utilizzare un array di byte con negoziazione del contenuto, ne ho aggiunto un rapido esempio a this gist
Da Nancy è possibile restituire un nuovo oggetto Response
. E 'Content
proprietà è di tipo Action<Stream>
così si può solo creare un delegato che scrive l'array di byte a quel flusso
var r = new Response();
r.Content = s => {
//write to s
};
Non dimenticare di impostare la proprietà ContentType
(si potrebbe usare MimeTypes.GetMimeType
e passarlo il nome, tra cui estensione) C'è anche un StreamResponse
, che eredita da Response
e fornisce un costruttore diverso (per un po 'la sintassi più bello è possibile utilizzare return Response.AsStream(..)
nel percorso .. solo caramelle sintassi)
In il tuo controller, restituisci Response.FromStream con un flusso di byte dell'immagine. Si chiamava AsStream nelle vecchie versioni di nancy.
Get["/Image/{ImageID}"] = parameters =>
{
string ContentType = "image/jpg";
Stream stream = // get a stream from the image.
return Response.FromStream(stream, ContentType);
};
Come si suppone di chiudere lo stream sorgente con questa API? Terribile. – Todd
Il flusso di origine viene eliminato automaticamente in seguito -https: //github.com/NancyFx/Nancy/issues/786 – Todd
È necessario assicurarsi che la posizione dello stream sia impostata all'inizio dello stream: 'stream.Seek (0, SeekOrigin.Begin) ', poiché' FromStream' non lo farà per te. –
- 1. In Meteor, come posso creare un gestore di eventi generico?
- 2. Come dovrei creare un gestore di handle in Rust?
- 3. Come creare un server Web di immagini?
- 4. Ottieni parametri URL in NancyFx
- 5. Come creare slideshow di immagini in html?
- 6. Come creare un gestore di errori globale nell'applicazione Windows Form?
- 7. Chiamare le attività di spegnimento in un singleton NancyFX Singleton
- 8. NancyFx e autenticazione di Windows
- 9. Come creare una galleria di immagini Django
- 10. Come posso creare un errore decente 404 gestore per CodeIgniter?
- 11. NancyFX: Deserialize JSON
- 12. Come rimuovere un gestore di eventi lambda
- 13. Come si scrive l'output in streaming in NancyFX?
- 14. Come posso creare una galleria di immagini in Drupal 7?
- 15. Creare un file .avi da un elenco di immagini bitmap
- 16. Convalida del modello con NancyFX
- 17. Configura NancyFx con Fluent Validation
- 18. Come creare video da immagini con php?
- 19. Come creare un gestore di errori globale in Redux e sovrascriverlo quando necessario?
- 20. Come posso creare una funzione con un gestore di completamento in Swift?
- 21. Errore di compilazione del rasoio con NancyFX
- 22. Come creare un video da immagini con FFmpeg?
- 23. Come ottenere HttpServletRequest in un gestore Ring?
- 24. Come posso creare un film con codifica H.264 da un insieme di immagini in C#?
- 25. Come creare un set di dati di classificazione di immagini in Azure?
- 26. Gestione di istanze di un gestore di contesto in un altro gestore di contesto
- 27. Eccezione non gestita in mono durante l'esecuzione di NancyFx
- 28. Come visualizzare un toast in un gestore/thread?
- 29. NancyFX: i percorsi con parametri di stringa di query restituiscono sempre un 404 NotFound
- 30. Come creare un gestore comune per tutti gli URL in arrivo?
Grazie mille per l'espansione della soluzione, è esattamente ciò di cui avevo bisogno. – sethxian
C'è un modo per fare in modo che il browser memorizzi nella cache la risposta dell'array di byte della richiesta? In modo che il gestore non lavori di nuovo per lo stesso URL? – Azadrum
Questo è terribile, quella cache è i byte in memoria. Non puoi eseguire lo streaming direttamente (utilizzando una memoria minima)? – Todd