【问题标题】:Can i download a pdf file saved in media in Umbraco我可以下载保存在 Umbraco 媒体中的 pdf 文件吗
【发布时间】:2016-11-14 11:21:14
【问题描述】:

我需要设置创建一个我有按钮的页面,点击它应该重定向到一个注册页面,然后下载一个 pdf 文件。所以我在 Umbraco 中创建了一个文档类型,它有一个文件上传字段,我通过它上传了一个文件。在其模板上,我添加了一个宏,该宏具有注册页面的部分视图。完成注册后,这个pdf文件应该会自动下载。

我的问题是,我上传的文件没有显示在媒体库中。但网址如下:/media/1051/filname.pdf .

我正在控制器中获取此 url。但无法使用其 id 获取文件。

  [HttpPost]
        public HttpResponseMessage DownloadFile([FromBody] DownloadEBookViewModel model)
        {
            int id = Convert.ToInt32(model.Url.Split('/')[2]);
            var media = Umbraco.Media(id).Url;


            if (!File.Exists(media))
                throw new HttpResponseException(HttpStatusCode.NotFound);

            HttpResponseMessage Response = new HttpResponseMessage(HttpStatusCode.OK);


            byte[] fileData = File.ReadAllBytes(media);

            if (fileData == null)
                throw new HttpResponseException(HttpStatusCode.NotFound);

            Response.Content = new ByteArrayContent(fileData);
            Response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");

            return Response;
        }

请有人帮忙。谢谢

【问题讨论】:

    标签: asp.net-mvc umbraco umbraco7


    【解决方案1】:

    在代码中使用 Umbraco 助手时,我建议使用类型化的变体来获取项目

    var media = Umbraco.TypedMedia(id).Url;

    这将为您提供一个带有智能感知的强类型模型

    要从您可能想要调用的媒体对象中获取物理文件

    byte[] fileData = File.ReadAllBytes(media.getPropertyValue("umbracoFile"));

    代替:

    byte[] fileData = File.ReadAllBytes(media);

    (代码未经测试)

    【讨论】:

    • 感谢您的回复。它真的帮助了我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2023-04-10
    • 2021-08-27
    • 2012-10-12
    • 2022-11-22
    相关资源
    最近更新 更多