#c# #asp.net #image
#c# #asp.net #изображение
Вопрос:
Привет, у меня есть сообщение api, в котором отображаются рекламные изображения в базе данных, и я получаю изображение. Когда я выдаю http://myserver/dynamic/images/569e61e9-d8ab-44ba-b935-1f7eae8ba39d.jpg это работает нормально, получите ответ 200 OK, но получите двоичный текст, отображаемый в теле, а не само изображение с правильным заголовком image / jpeg введите описание изображения здесь
введите описание изображения здесь Я просмотрел этот форум и увидел проблемы, связанные с перехватчиком, который отключен в моем postman.
byte[] buffer = null;
var id = Guid.Parse(Path.GetFileName(path).Split(".")[0]);
using (var db = new EFContext()) {
var imageFromDb = await db.Images.SingleOrDefaultAsync(x => x.Id == id);
buffer = imageFromDb.Data;
}
if (buffer != null amp;amp; buffer.Length > 1) {
context.Response.ContentLength = buffer.Length;
context.Response.ContentType = "image/" Path.GetExtension(path).Replace(".", "");
await context.Response.Body.WriteAsync(buffer, 0, buffer.Length);
}
else {
context.Response.StatusCode = 404;
}
Комментарии:
1. Чтобы лучше помочь вам, не могли бы вы опубликовать данные вашего запроса, технический стек, который вы используете для вызова своего API, и минимальный жизнеспособный образец вашего кода?
2. Это get для извлечения изображений из базы данных sqlite. Имя изображений GUId.jpg пример: 569e61e9-d8ab-44ba-b935-1f7eae8ba39d.jpg . API представляет собой код на C #
3. byte[] buffer = null; идентификатор переменной = Guid.Parse(Путь.GetFileName(путь). Разделение(«.»)[0]); используя (var db = new EFContext()) { var imageFromDb = await db. Изображения. SingleOrDefaultAsync(x => x.Id == идентификатор); buffer = imageFromDb.Data; } если (buffer != null amp;amp; buffer. Длина> 1) { context.Response. ContentLength = buffer . Длина; контекст.Ответ. ContentType = «image/» Path.getExtension(путь). Replace(«.», «»); ожидает context.Response.Body . WriteAsync(буфер, 0, буфер. Длина); } else context.Response. StatusCode = 404; }
4. byte[] buffer = null; идентификатор переменной = Guid.Parse(Путь.GetFileName(путь). Разделение(«.»)[0]); используя (var db = new EFContext()) { var imageFromDb = await db. Изображения. SingleOrDefaultAsync(x => x.Id == идентификатор); buffer = imageFromDb.Data; } если (buffer != null amp;amp; buffer. Длина> 1) { context.Response. ContentLength = buffer . Длина; контекст.Ответ. ContentType = «image/» Path.getExtension(путь). Replace(«.», «»); ожидает context.Response.Body . WriteAsync(буфер, 0, буфер. Длина); } else context.Response. StatusCode = 404; }
Ответ №1:
Взглянув на ваш код, я вижу, что проблема связана с типом MIME вашего ответа. Для отображения изображений в формате jpg (jpeg) необходимо использовать следующий MIME-тип:
image/jpeg
Обновите свой код следующим образом, и он будет корректно отображать изображение:
byte[] buffer = null;
var id = Guid.Parse(Path.GetFileName(path).Split(".")[0]);
using (var db = new EFContext()) {
var imageFromDb = await db.Images.SingleOrDefaultAsync(x => x.Id == id);
buffer = imageFromDb.Data;
}
if (buffer != null amp;amp; buffer.Length > 1) {
context.Response.ContentLength = buffer.Length;
context.Response.ContentType = "image/jpeg";
await context.Response.Body.WriteAsync(buffer, 0, buffer.Length);
}
else {
context.Response.StatusCode = 404;
}
Если вы ищете более динамичный метод назначения типа mime, вы можете использовать что-то вроде этого. Обратите внимание, что это далеко не полный и служит примером:
var fileExtension = Path.GetExtension(path).Replace(".", "");
var mimeType = "image/jpeg";
switch(fileExtension) {
case "svg":
mimeType = "image/svg xml";
case "png":
mimeType = "image/png";
case "jpg":
case "jpeg":
case default:
mimeType = "image/jpeg";
}
//...
context.Response.ContentType = mimeType;
//...
См. https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types для получения более подробной информации о типах MIME.
Комментарии:
1. Вы правы, я извлекал расширение из файла изображения jpg, теперь оно работает как шарм, так что большое спасибо и извините за мой отложенный ответ