当一个文件通过CMS.File页面类型上传到ASP.NET时,我们需要在MVC端检索它。
我可以做以下事情吗?
var kntcoFile = FileProvider.GetFile(completeAlias, "en-US", "MySite").FirstOrDefault();
假设API找到了该文件,如何访问该文件的二进制数据,以便将其返回给浏览器?
发布于 2019-01-10 01:28:14
即使您在幕后使用文件页面类型,您仍在使用附件。您应该看看attachment api和AttachmentInfoProvider类
因此,如果你有页面对象,你可以这样做
DocumentAttachment da = page?.AllAttachments.FirstOrDefault();或
var attachment = AttachmentInfoProvider.GetAttachments()
.WhereEquals("ColumnFromCMS_Attachment", "value")
.FirstOrDefault();不确定哪一个更适用,但它应该会给你一个想法...
另外,你也可以看看kentico MVC project on github and search for attachment
发布于 2019-01-10 04:44:03
非常感谢你的指点。我能够获得附件,并使用以下方法返回到浏览器。关键字是使用附件的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();
}发布于 2019-01-11 02:57:22
我为图像做了类似的事情,所以我修改了我的,希望能在你的场景中工作。需要注意的是,除非调用重载并传入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;
}https://stackoverflow.com/questions/54114304
复制相似问题