diff options
Diffstat (limited to 'MediaBrowser.Api/HttpHandlers/ImageHandler.cs')
| -rw-r--r-- | MediaBrowser.Api/HttpHandlers/ImageHandler.cs | 75 |
1 files changed, 60 insertions, 15 deletions
diff --git a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs index c53afb5c4..826438098 100644 --- a/MediaBrowser.Api/HttpHandlers/ImageHandler.cs +++ b/MediaBrowser.Api/HttpHandlers/ImageHandler.cs @@ -2,6 +2,8 @@ using System.IO;
using System.Linq;
using System.Threading.Tasks;
+using MediaBrowser.Common.Logging;
+using MediaBrowser.Common.Net;
using MediaBrowser.Common.Net.Handlers;
using MediaBrowser.Controller;
using MediaBrowser.Model.Entities;
@@ -10,12 +12,12 @@ namespace MediaBrowser.Api.HttpHandlers {
public class ImageHandler : BaseHandler
{
- private string _ImagePath = string.Empty;
+ private string _ImagePath = null;
private string ImagePath
{
get
{
- if (string.IsNullOrEmpty(_ImagePath))
+ if (_ImagePath == null)
{
_ImagePath = GetImagePath();
}
@@ -24,18 +26,61 @@ namespace MediaBrowser.Api.HttpHandlers }
}
- public override string ContentType
+ private Stream _SourceStream = null;
+ private Stream SourceStream
{
get
{
- string extension = Path.GetExtension(ImagePath);
+ EnsureSourceStream();
+
+ return _SourceStream;
+ }
+ }
- if (extension.EndsWith("png", StringComparison.OrdinalIgnoreCase))
+
+ private bool _SourceStreamEnsured = false;
+ private void EnsureSourceStream()
+ {
+ if (!_SourceStreamEnsured)
+ {
+ try
+ {
+ _SourceStream = File.OpenRead(ImagePath);
+ }
+ catch (FileNotFoundException ex)
+ {
+ StatusCode = 404;
+ Logger.LogException(ex);
+ }
+ catch (DirectoryNotFoundException ex)
+ {
+ StatusCode = 404;
+ Logger.LogException(ex);
+ }
+ catch (UnauthorizedAccessException ex)
+ {
+ StatusCode = 403;
+ Logger.LogException(ex);
+ }
+ finally
{
- return "image/png";
+ _SourceStreamEnsured = true;
}
+ }
+ }
+
+ public override string ContentType
+ {
+ get
+ {
+ EnsureSourceStream();
- return "image/jpeg";
+ if (SourceStream == null)
+ {
+ return null;
+ }
+
+ return MimeTypes.GetMimeType(ImagePath);
}
}
@@ -49,14 +94,14 @@ namespace MediaBrowser.Api.HttpHandlers protected override DateTime? GetLastDateModified()
{
- try
- {
- return File.GetLastWriteTime(ImagePath);
- }
- catch
+ EnsureSourceStream();
+
+ if (SourceStream == null)
{
- return base.GetLastDateModified();
+ return null;
}
+
+ return File.GetLastWriteTime(ImagePath);
}
private int? Height
@@ -142,7 +187,7 @@ namespace MediaBrowser.Api.HttpHandlers if (string.IsNullOrEmpty(imageType))
{
- return Model.Entities.ImageType.Primary;
+ return ImageType.Primary;
}
return (ImageType)Enum.Parse(typeof(ImageType), imageType, true);
@@ -153,7 +198,7 @@ namespace MediaBrowser.Api.HttpHandlers {
return Task.Run(() =>
{
- ImageProcessor.ProcessImage(ImagePath, stream, Width, Height, MaxWidth, MaxHeight, Quality);
+ ImageProcessor.ProcessImage(SourceStream, stream, Width, Height, MaxWidth, MaxHeight, Quality);
});
}
|
