Asp.net mvc 从CMS.File页面类型检索二进制数据

Asp.net mvc 从CMS.File页面类型检索二进制数据,asp.net-mvc,kentico,Asp.net Mvc,Kentico,我们将ASP.NET MVC网站与Kentico 11一起使用。当使用CMS.file页面类型将文件上载到CMS时,我们需要在MVC端检索它 也许我可以做以下事情 var kntcoFile=FileProvider.GetFile(completeAlias,“en-US”,“MySite”).FirstOrDefault() 假设API找到了该文件,如何访问该文件的二进制数据,以便将其返回到浏览器?即使您使用的是文件页面类型-在幕后,您仍在处理附件。你应该在课堂上看一看 所以,如果您有pag

我们将ASP.NET MVC网站与Kentico 11一起使用。当使用CMS.file页面类型将文件上载到CMS时,我们需要在MVC端检索它

也许我可以做以下事情

var kntcoFile=FileProvider.GetFile(completeAlias,“en-US”,“MySite”).FirstOrDefault()


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

即使您使用的是文件页面类型-在幕后,您仍在处理附件。你应该在课堂上看一看

所以,如果您有page对象,您可以执行以下操作

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

不确定哪一个更适用,但它应该给你的想法

另外,你也可以看看


p.p.S.也检查一下

非常感谢你的指点。我可以使用以下方法获取附件并返回到浏览器。密钥使用的是附件的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();
}

我为图像做了类似的事情,所以我修改了我的,希望能在你的场景中工作。需要注意的是,除非调用重载并传入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;
}

使用
AllAttachments
属性获取
DocumentAttachment
对象。但是我假设包含文件字节数组的
AttachmentBinary
属性为空。有什么想法吗?检查最后一个链接
在MVC应用程序中使用页面附件
有一个主题创建页面附件URL我已经检查过了。我在那篇文章中找不到任何解释如何使用内置的
CMS.DocumentEngine.Types.CMS.File
的内容,如果您有附件GUID,您可以将url作为附件的url,如
~/getattachment/
,Kentico CMS会在该url上返回404。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)
        {
            var attachmentBinary = AttachmentInfoProvider.GetAttachmentInfo(attachment.AttachmentID, true);
            return base.File(attachmentBinary.AttachmentBinary, attachment.AttachmentMimeType);
        }
    }


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