Rest API,在客户端生成文件

时间:2018-11-05 17:07:10

标签: asp.net-mvc asp.net-web-api fabricjs jspdf

我有一个带控制器的asp.net核心网站,该控制器返回带有ViewModel的View。

此视图使用jsPdf在javascript上生成pdf。我无法在服务器端执行pdf生成,因为我使用的是客户端组件(fabric.js)

我想公开一个API,以便能够下载此pdf。

当我使用浏览器到达终点时,pdf文件已正确下载。 当我在C#中使用邮递员或WebClient时,我无法获取pdf ... 我想我缺少了一些东西。测试方法不起作用,我有一个pdf文件,但无法打开,它只有15ko:(

我的观点:

<script src="/Scripts/fabric.js"></script>
<script src="/Scripts/jspdf.debug.js"></script>
<script type="text/javascript">
    var canvas = new fabric.Canvas('canvas', {});
    canvas.loadFromJSON(@Html.Raw(Model.Json),
        () => {
            canvas.setWidth(@Model.Width);
            canvas.setHeight(@Model.Height);
            var imgData = new Image();
            imgData.crossOrigin = "Anonymous";
            imgData.src = canvas.toDataURL('png');
            var pdf = new jsPDF('p', 'pt', [@Model.Width, @Model.Height]);
            pdf.addImage(imgData, 'PNG', 1, 1, @Model.Width, @Model.Height, 'Mockup', 'NONE', 0);
            pdf.save('myMockup.pdf');
        }
    );  
</script>

我的控制器:

    public IActionResult Generate(int id)
    {
        var mockup = DynamicValueAppService.ParseMockup(id);
        var mockupVM = new MockupGeneratorViewModel()
        {
            Width = mockup.Width,
            Height = mockup.Height,
            Json = JObject.Parse(mockup.Json)
        };
        Response.Headers.Add("Content-Type","application/octet-stream");
        Response.Headers.Add("Content-Disposition", "attachment");
        return View(mockupVM);
    }


    public IActionResult Test()
    {
        var client = new WebClient();
        client.DownloadFile("http://localhost:21021/Mockup/generate/1", @"C:\mum.pdf");
        return new EmptyResult();
    }

0 个答案:

没有答案