从CMS检索二进制数据。文件页面类型

时间:2019-01-09 16:19:27

标签: asp.net-mvc kentico

我们将Kentico 11与ASP.NET MVC网站结合使用。当使用CMS.File页面类型将文件上传到CMS时,我们需要在MVC端进行检索。

我可以做以下事情吗?

var kntcoFile = FileProvider.GetFile(completeAlias, "en-US", "MySite").FirstOrDefault();

假设API找到了文件,我如何访问文件的二进制数据,以便可以将其返回给浏览器?

3 个答案:

答案 0 :(得分:1)

即使您使用的是文件页面类型-在后台,您仍在使用附件。您应该查看attachment apiAttachmentInfoProvider

因此,如果您有页面对象,则可以执行类似的操作

DocumentAttachment da = page?.AllAttachments.FirstOrDefault();

   var attachment = AttachmentInfoProvider.GetAttachments()
       .WhereEquals("ColumnFromCMS_Attachment", "value")
       .FirstOrDefault();

不确定哪一个更适用,但是应该可以给您一个主意...

P.S。您还可以看看kentico MVC project on github and search for attachment

P.P.S。同时检查Working with page attachments in MVC applications

答案 1 :(得分:0)

非常感谢指针。我能够使用以下方法获取附件并返回浏览器。关键是使用附件的GUID,但使用文档的名称。

代码需要进行一些清理,但只是在有人需要的情况下进行共享:

public ActionResult FilePage(string completeAlias)
{
    var kntcoFile = FileProvider.GetFile(completeAlias, "en-US", "MySite").FirstOrDefault();
    if (kntcoFile != null)
    {
        DocumentAttachment attachment = kntcoFile.AllAttachments.FirstOrDefault();
        if (attachment != null)
        {
            string kenticoSite = System.Configuration.ConfigurationManager.AppSettings["KenticoSite"];
            string fileUrl = string.Format("{0}getattachment/{1}/{2}", kenticoSite, attachment.AttachmentGUID, kntcoFile.DocumentName);
            byte[] fileBytes = null;

            using (WebClient wc = new WebClient())
            {
                fileBytes = wc.DownloadData(fileUrl);
            }
            return new FileContentResult(fileBytes, attachment.AttachmentMimeType);
        }
    }
    return new HttpNotFoundResult();
}

答案 2 :(得分:0)

我对图像做了类似的事情,所以我修改了我的图像,希望可以在您的情况下工作。需要注意的是,除非您调用重载并传递true来返回AttachmentBinary,否则不会返回。

public ActionResult FilePage(string completeAlias)
{
    var kntcoFile = FileProvider.GetFile(completeAlias, "en-US", "MySite").FirstOrDefault();
    if (kntcoFile != null)
    {
        DocumentAttachment attachment = kntcoFile.AllAttachments.FirstOrDefault();
        if (attachment != null)
        {
            var attachmentBinary = AttachmentInfoProvider.GetAttachmentInfo(attachment.AttachmentID, true);
            return base.File(attachmentBinary.AttachmentBinary, attachment.AttachmentMimeType);
        }
    }


    EventLogProvider.LogInformation("GetFile", "NOTFOUND", "attachment Not Found" + completeAlias + " /");
    return null;
}