Tôi đang cố gắng tạo ra một Hình ảnh từ byte [] ra khỏi cơ sở dữ liệu của tôi trong NancyFX thành luồng đầu ra web. Tôi không có mã mẫu đủ gần để hiển thị tại thời điểm này. Tôi đã tự hỏi nếu có ai đã giải quyết vấn đề này và có thể gửi một đoạn? Tôi về cơ bản chỉ muốn trả lại hình ảnh/jpeg từ một mảng byte được lưu trữ trong cơ sở dữ liệu của tôi và đưa nó vào web chứ không phải là một tập tin vật lý.Cách tạo một trình xử lý hình ảnh trong NancyFx
Trả lời
chỉ cần để xây dựng trên @ câu trả lời TheCodeJunkie, bạn có thể xây dựng một "phản ứng mảng byte" rất dễ dàng như thế này:
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);
}
};
}
}
Sau đó, nếu bạn muốn sử dụng Response.AsX cú pháp đó là một phương pháp mở rộng đơn giản trên đầu trang:
public static class Extensions
{
public static Response FromByteArray(this IResponseFormatter formatter, byte[] body, string contentType = null)
{
return new ByteArrayResponse(body, contentType);
}
}
Sau đó, trong con đường của bạn, bạn có thể chỉ cần sử dụng:
Response.FromByteArray(myImageByteArray, "image/jpeg");
Bạn cũng có thể thêm bộ xử lý để sử dụng mảng byte có thương lượng nội dung, tôi đã thêm mẫu nhanh vào đó để this gist
Từ Nancy, bạn có thể trả lại đối tượng Response
mới. Đó là Content
tài sản là loại Action<Stream>
vì vậy bạn chỉ có thể tạo ra một đại biểu rằng viết mảng byte của bạn để dòng mà
var r = new Response();
r.Content = s => {
//write to s
};
Đừng quên để thiết lập ContentType
sở hữu (bạn có thể sử dụng MimeTypes.GetMimeType
và vượt qua nó tên, kể cả mở rộng) Ngoài ra còn có một StreamResponse
, được thừa kế từ Response
và cung cấp một constructor khác nhau (ví một chút cú pháp đẹp hơn bạn có thể sử dụng return Response.AsStream(..)
trong lộ trình của bạn .. chỉ cú pháp kẹo)
Trong bộ điều khiển của bạn, trả về Response.FromStream với luồng byte của hình ảnh. Nó được sử dụng để được gọi là AsStream trong các phiên bản cũ của nancy.
Get["/Image/{ImageID}"] = parameters =>
{
string ContentType = "image/jpg";
Stream stream = // get a stream from the image.
return Response.FromStream(stream, ContentType);
};
Bạn phải đóng luồng nguồn bằng API này như thế nào? Khủng khiếp. – Todd
Luồng nguồn được xử lý tự động sau này --ttg: //github.com/NancyFx/Nancy/issues/786 – Todd
Bạn phải đảm bảo rằng vị trí dòng được đặt ở đầu luồng: 'stream.Seek (0, SeekOrigin.Begin) ', vì' FromStream' sẽ không làm điều đó cho bạn. –
- 1. Tái xử lý hình ảnh trong Carrierwave
- 2. Xử lý hình ảnh 2D với WebGL
- 3. Trình duyệt Chrome không hiển thị hình ảnh được tạo bởi trình xử lý HTTP
- 4. tạo phẩm xử lý hình ảnh song song
- 5. Cách xử lý hình ảnh nhiều trang trong PythonMagick?
- 6. tinyMCE - cách xử lý tải lên hình ảnh
- 7. Ý tưởng xử lý hình ảnh
- 8. Xử lý hình ảnh trên Android
- 9. html5, thêm một trình xử lý sự kiện vào một hình ảnh được vẽ trên canvas
- 10. PixelMed - xử lý hình ảnh DICOM
- 11. cách áp dụng trình xử lý sự kiện nhấp chuột vào hình ảnh trong android
- 12. Thư viện xử lý hình ảnh
- 13. Xử lý hình ảnh, bằng Python?
- 14. Máy chủ xử lý hình ảnh
- 15. Carrierwave thêm một watermark để xử lý hình ảnh
- 16. Xử lý hình ảnh - Làm mịn
- 17. Xử lý ảnh máy ảnh
- 18. Xử lý ảnh WinRT
- 19. Xử lý hình ảnh C++ - Đọc một tập tin hình ảnh vào 2D Array
- 20. Xử lý ảnh lớn trong iOS
- 21. Đặt trình xử lý hoạt ảnh thành Hoạt ảnh động
- 22. Làm cách nào để triển khai trình xử lý cảm ứng trên hình ảnh?
- 23. Làm cách nào để chuyển đổi chương trình xử lý hình ảnh MATLAB sang java?
- 24. lib xử lý hình ảnh nguồn mở trong java
- 25. Tạo trình xử lý gọi lại để xử lý nhiều cuộc gọi lại trong Android
- 26. Xử lý hình ảnh trên CUDA hoặc OpenCV?
- 27. Xử lý tiền xử lý hình ảnh OpenCV để phát hiện đối tượng
- 28. Kết hợp biểu đồ - xử lý hình ảnh - c/C++
- 29. MATLAB xử lý hình ảnh của vòng tròn nhỏ
- 30. iOS - Không thể xử lý hình ảnh bằng CIFilter
Cảm ơn bạn rất nhiều vì đã mở rộng giải pháp, đó chính xác là những gì tôi cần. – sethxian
Có cách nào để làm cho bộ nhớ cache của trình duyệt đáp ứng mảng byte của yêu cầu không? Vì vậy, trình xử lý sẽ không hoạt động lại cho cùng một url? – Azadrum
Đó là khủng khiếp, bộ nhớ cache của byte trong bộ nhớ. Bạn không thể phát trực tiếp (sử dụng bộ nhớ tối thiểu)? – Todd