Search code examples
c#kenticokentico-api

Kentico CMS creating additional file when attempting to overwrite existing one via Kentico API


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.

[1]: https://i.sstatic.net/R9XDN.png

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);
        }
    }
}

Solution

  • 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);
        }
    }