Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Reproduction of U4-9904
using System.IO;
using System.Linq;
using System.Net;
using System.Web.Http;
using Umbraco.Core.Models;
using Umbraco.Web.WebApi;
namespace U4_9904.Controllers
{
public class MediaTestController : UmbracoApiController
{
[HttpGet]
public bool CreateImage(int timesToRun = 1, bool? withworkaround = null)
{
for (int i = 0; i < timesToRun; i++)
{
GetAndSaveImage(withworkaround ?? false);
}
return true;
}
private void GetAndSaveImage(bool withworkaround)
{
// Get the image from umbraco
IMedia firstFolderWeCanFind = Services.MediaService.GetChildren(-1)
.FirstOrDefault(m => m.ContentType.Alias == "Folder");
if (firstFolderWeCanFind == null)
{
// make sure we have a folder
firstFolderWeCanFind = Services.MediaService.CreateMedia("beautiful images", -1, "Folder");
Services.MediaService.Save(firstFolderWeCanFind);
}
// Get the image from the interwebz
string photoUrl = "https://picsum.photos/200/300/?random";
WebRequest req = WebRequest.Create(photoUrl);
WebResponse response = req.GetResponse();
using (Stream stream = response.GetResponseStream())
using (MemoryStream ms = new MemoryStream())
{
int count = 0;
do
{
byte[] buf = new byte[1024];
count = stream.Read(buf, 0, 1024);
ms.Write(buf, 0, count);
} while (stream.CanRead && count > 0);
// b = ms.ToArray();
ms.Position = 0;
// Determine the internal filename
int startIndex = photoUrl.LastIndexOf("/", System.StringComparison.Ordinal) + 1;
var lenght = (photoUrl.IndexOf("?", startIndex, System.StringComparison.Ordinal) >= 0)
? photoUrl.IndexOf("?", startIndex, System.StringComparison.Ordinal) - startIndex
: photoUrl.Length - startIndex;
var fileName = photoUrl.Substring(startIndex, lenght);
if (fileName == "")
{
fileName = "random-image.jpg";
}
// Get the image from umbraco
IMedia image = Services.MediaService.GetChildren(firstFolderWeCanFind.Id)
.FirstOrDefault(m => m.ContentType.Alias == "Image");
if (image == null)
{
image = Services.MediaService.CreateMedia(fileName, firstFolderWeCanFind, "Image");
}
else if (withworkaround == true)
{
// https://issues.umbraco.org/issue/U4-9904
// Set the umbracoFile value to null, so that when SetValue is called
// the 'old' value will be null and Umbraco will not try to delete the file
image.Properties["umbracoFile"].Value = null;
}
image.SetValue("umbracoFile", fileName, ms);
Services.MediaService.Save(image);
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment