As you can see in the screenshot below Kentico CMS is creating an additional file when attempting to overwrite an existing media file using Kentico API 11.0.26. My goal is the just have one file.
Here is my API code
// Gets the media library
MediaLibraryInfo library = MediaLibraryInfoProvider.GetMediaLibraryInfo(libraryName, siteName);
if (library != null)
{
// Gets all .png files from the "NewFolder" folder of the specified media library
var mediaFiles = MediaFileInfoProvider.GetMediaFiles()
.WhereEquals("FileLibraryID", library.LibraryID)
.WhereEquals("FileName", fileName)
.WhereStartsWith("FilePath", folderName);
if (mediaFiles.Count == 0)//no existing file by that name, create new one
{
// Creates a new media library file object
MediaFileInfo mediaFile = new MediaFileInfo();
// Sets the media library file properties
mediaFile.FileSiteID = siteId;
mediaFile.FileLibraryID = library.LibraryID;
mediaFile.FileName = fileName;
mediaFile.FileTitle = headerSubtitle;
mediaFile.FileDescription = "some report";
mediaFile.FilePath = string.Format("{0}/", folderName); // Sets the path within the media library's folder structure
mediaFile.FileExtension = ".pdf";
mediaFile.FileMimeType = MimeTypeHelper.GetMimetype(".pdf");
using (StreamReader streamReader = new StreamReader(outputFilename))
{
mediaFile.FileBinaryStream = streamReader.BaseStream;
mediaFile.FileSize = streamReader.BaseStream.Length;
// Saves the media library file
MediaFileInfoProvider.SetMediaFileInfo(mediaFile);
}
}
else//file already existing by that name, update it's contents
{
// Gets the media file
MediaFileInfo updateFile = mediaFiles.FirstObject;
using (StreamReader streamReader = new StreamReader(outputFilename))
{
updateFile.FileBinaryStream = streamReader.BaseStream;
updateFile.FileSize = streamReader.BaseStream.Length;
// Saves the media library file
MediaFileInfoProvider.SetMediaFileInfo(updateFile);
}
}
}
Maybe the MediaFileInfoProvider.SetMediaFileInfo(mediaFile, false);
solved the problem, but in one project I solved it by deleting the previous file before saving the new one.
...
else //file already existing by that name, update it's contents
{
// Gets the media file
MediaFileInfo updateFile = mediaFiles.FirstObject;
updateFile.Delete(); // DELETE IT
using (StreamReader streamReader = new StreamReader(outputFilename))
{
MediaFileInfo updateFile = new MediaFileInfo();
//Set here all properties
updateFile.FileBinaryStream = streamReader.BaseStream;
updateFile.FileSize = streamReader.BaseStream.Length;
// Saves the media library file
MediaFileInfoProvider.SetMediaFileInfo(updateFile);
}
}