【问题标题】:Kentico CMS creating additional file when attempting to overwrite existing one via Kentico APIKentico CMS 在尝试通过 Kentico API 覆盖现有文件时创建附加文件
【发布时间】:2020-01-27 15:51:42
【问题描述】:

正如您在下面的屏幕截图中看到的那样,在尝试使用 Kentico API 11.0.26 覆盖现有媒体文件时,Kentico CMS 正在创建一个附加文件。我的目标是只有一个文件。

这是我的 API 代码

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

【问题讨论】:

    标签: c# kentico kentico-api


    【解决方案1】:

    也许MediaFileInfoProvider.SetMediaFileInfo(mediaFile, false); 解决了这个问题,但在一个项目中,我通过在保存新文件之前删除之前的文件解决了这个问题。

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

    【讨论】:

    • 最终删除并重新创建文件
    【解决方案2】:

    尝试将 SetMediaFileInfo 方法的 ensureUniqueFileName 参数设置为 false,例如:MediaFileInfoProvider.SetMediaFileInfo(mediaFile, false);

    如果这不起作用,您最好先删除现有文件。

    【讨论】:

    • 没有这样的属性叫做ensureUniqueFileName
    • 试试:MediaFileInfoProvider.SetMediaFileInfo(mediaFile, false);
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多