Extra checks for empty strings and non-existing paths, use PhysicalFileSystem

This commit is contained in:
Sebastiaan Janssen
2013-01-03 09:48:29 -01:00
parent 0ca91c9229
commit 4166cd9f5d
2 changed files with 48 additions and 33 deletions

View File

@@ -150,6 +150,11 @@ namespace Umbraco.Core.IO
return File.Exists(GetFullPath(path));
}
public string GetExtension(string path)
{
return Path.GetExtension(GetFullPath(path));
}
public string GetRelativePath(string fullPathOrUrl)
{
var relativePath = fullPathOrUrl

View File

@@ -23,16 +23,15 @@ namespace Umbraco.Web.Strategies.DataTypes
{
public LegacyUploadFieldWorkaround()
{
global::umbraco.cms.businesslogic.media.Media.BeforeSave += Media_BeforeSave;
global::umbraco.cms.businesslogic.web.Document.BeforeSave += Document_BeforeSave;
global::umbraco.cms.businesslogic.media.Media.BeforeSave += MediaBeforeSave;
global::umbraco.cms.businesslogic.web.Document.BeforeSave += DocumentBeforeSave;
}
void Document_BeforeSave(global::umbraco.cms.businesslogic.web.Document sender, global::umbraco.cms.businesslogic.SaveEventArgs e)
void DocumentBeforeSave(global::umbraco.cms.businesslogic.web.Document sender, global::umbraco.cms.businesslogic.SaveEventArgs e)
{
if (UmbracoSettings.ImageAutoFillImageProperties != null)
{
var property =
sender.GenericProperties.FirstOrDefault(x => x.PropertyType.DataTypeDefinition.DataType.Id == new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c"));
var property = sender.GenericProperties.FirstOrDefault(x => x.PropertyType.DataTypeDefinition.DataType.Id == new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c"));
if (property == null)
return;
@@ -41,12 +40,11 @@ namespace Umbraco.Web.Strategies.DataTypes
}
}
void Media_BeforeSave(global::umbraco.cms.businesslogic.media.Media sender, global::umbraco.cms.businesslogic.SaveEventArgs e)
void MediaBeforeSave(global::umbraco.cms.businesslogic.media.Media sender, global::umbraco.cms.businesslogic.SaveEventArgs e)
{
if (UmbracoSettings.ImageAutoFillImageProperties != null)
{
var property =
sender.GenericProperties.FirstOrDefault(x => x.PropertyType.DataTypeDefinition.DataType.Id == new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c"));
var property = sender.GenericProperties.FirstOrDefault(x => x.PropertyType.DataTypeDefinition.DataType.Id == new Guid("5032a6e6-69e3-491d-bb28-cd31cd11086c"));
if (property == null)
return;
@@ -57,32 +55,38 @@ namespace Umbraco.Web.Strategies.DataTypes
private void FillProperties(IContentBase content, global::umbraco.cms.businesslogic.property.Property property)
{
XmlNode uploadFieldConfigNode =
global::umbraco.UmbracoSettings.ImageAutoFillImageProperties.SelectSingleNode(string.Format("uploadField [@alias = \"{0}\"]", property.PropertyType.Alias));
XmlNode uploadFieldConfigNode = global::umbraco.UmbracoSettings.ImageAutoFillImageProperties.SelectSingleNode(string.Format("uploadField [@alias = \"{0}\"]", property.PropertyType.Alias));
if (uploadFieldConfigNode != null)
{
var fs = FileSystemProviderManager.Current.GetFileSystemProvider<MediaFileSystem>();
var fileSystem = new PhysicalFileSystem("/");
string path = string.IsNullOrEmpty(property.Value.ToString())
? string.Empty
: System.Web.Hosting.HostingEnvironment.MapPath(property.Value.ToString());
var path = string.IsNullOrEmpty(property.Value.ToString())
? string.Empty
: System.Web.Hosting.HostingEnvironment.MapPath(property.Value.ToString());
FileStream s = System.IO.File.OpenRead(path);
long size = s.Length;
s.Close();
var extension = Path.GetExtension(path) != null
? Path.GetExtension(path).Substring(1).ToLowerInvariant()
: "";
var supportsResizing = ("," + UmbracoSettings.ImageFileTypes + ",").Contains(string.Format(",{0},", extension));
var dimensions = supportsResizing ? GetDimensions(path) : null;
if (string.IsNullOrWhiteSpace(path) == false && fileSystem.FileExists(path))
{
long size;
using (var fileStream = fileSystem.OpenFile(path))
{
size = fileStream.Length;
}
// only add dimensions to web images
UpdateProperty(uploadFieldConfigNode, content, "widthFieldAlias", supportsResizing ? dimensions.Item1.ToString(CultureInfo.InvariantCulture) : string.Empty);
UpdateProperty(uploadFieldConfigNode, content, "heightFieldAlias", supportsResizing ? dimensions.Item2.ToString(CultureInfo.InvariantCulture) : string.Empty);
var extension = fileSystem.GetExtension(path) != null
? fileSystem.GetExtension(path).Substring(1).ToLowerInvariant()
: "";
UpdateProperty(uploadFieldConfigNode, content, "lengthFieldAlias", size == default(long) ? string.Empty : size.ToString(CultureInfo.InvariantCulture));
UpdateProperty(uploadFieldConfigNode, content, "extensionFieldAlias", string.IsNullOrEmpty(extension) ? string.Empty : extension);
var supportsResizing = ("," + UmbracoSettings.ImageFileTypes + ",").Contains(string.Format(",{0},", extension));
var dimensions = supportsResizing ? GetDimensions(path) : null;
// only add dimensions to web images
UpdateProperty(uploadFieldConfigNode, content, "widthFieldAlias", supportsResizing ? dimensions.Item1.ToString(CultureInfo.InvariantCulture) : string.Empty);
UpdateProperty(uploadFieldConfigNode, content, "heightFieldAlias", supportsResizing ? dimensions.Item2.ToString(CultureInfo.InvariantCulture) : string.Empty);
UpdateProperty(uploadFieldConfigNode, content, "lengthFieldAlias", size == default(long) ? string.Empty : size.ToString(CultureInfo.InvariantCulture));
UpdateProperty(uploadFieldConfigNode, content, "extensionFieldAlias", string.IsNullOrEmpty(extension) ? string.Empty : extension);
}
}
}
@@ -100,12 +104,18 @@ namespace Umbraco.Web.Strategies.DataTypes
private Tuple<int, int> GetDimensions(string path)
{
var fs = System.IO.File.OpenRead(path);
var image = Image.FromStream(fs);
var fileWidth = image.Width;
var fileHeight = image.Height;
fs.Close();
image.Dispose();
var fileSystem = new PhysicalFileSystem("/");
int fileWidth;
int fileHeight;
using (var stream = fileSystem.OpenFile(path))
{
using (var image = Image.FromStream(stream))
{
fileWidth = image.Width;
fileHeight = image.Height;
}
}
return new Tuple<int, int>(fileWidth, fileHeight);
}