Asp.net mvc 从CMS.File页面类型检索二进制数据
我们将ASP.NET MVC网站与Kentico 11一起使用。当使用CMS.file页面类型将文件上载到CMS时,我们需要在MVC端检索它 也许我可以做以下事情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
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;
}