首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从CMS.File页面类型检索二进制数据

从CMS.File页面类型检索二进制数据
EN

Stack Overflow用户
提问于 2019-01-10 00:19:27
回答 3查看 256关注 0票数 0

当一个文件通过CMS.File页面类型上传到ASP.NET时,我们需要在MVC端检索它。

我可以做以下事情吗?

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-01-10 01:28:14

即使您在幕后使用文件页面类型,您仍在使用附件。您应该看看attachment apiAttachmentInfoProvider

因此,如果你有页面对象,你可以这样做

代码语言:javascript
运行
复制
DocumentAttachment da = page?.AllAttachments.FirstOrDefault();

代码语言:javascript
运行
复制
   var attachment = AttachmentInfoProvider.GetAttachments()
       .WhereEquals("ColumnFromCMS_Attachment", "value")
       .FirstOrDefault();

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

另外,你也可以看看kentico MVC project on github and search for attachment

P.P.S.也检查Working with page attachments in MVC applications

票数 1
EN

Stack Overflow用户

发布于 2019-01-10 04:44:03

非常感谢你的指点。我能够获得附件,并使用以下方法返回到浏览器。关键字是使用附件的GUID,而是文档的名称。

代码需要一些清理,但只是共享,以防有人需要它:

代码语言:javascript
运行
复制
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();
}
票数 0
EN

Stack Overflow用户

发布于 2019-01-11 02:57:22

我为图像做了类似的事情,所以我修改了我的,希望能在你的场景中工作。需要注意的是,除非调用重载并传入true以返回AttachmentBinary,否则不会返回它。

代码语言:javascript
运行
复制
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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54114304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档