【问题标题】:MVC - How to request and save a pdf file from a urlMVC - 如何从 url 请求和保存 pdf 文件
【发布时间】:2016-06-26 08:18:03
【问题描述】:

我需要编写一个包含 3 个部分的 api:

  1. 从 pdf url 获取 pdf 文件。
  2. 转换 pdf。
  3. 返回转换后的pdf文件。

我已经完成了第 2 部分和第 3 部分, 剩下的就是从 url 获取 pdf 并将其复制/下载到我的 mvc web api。

这是测试html代码:

< script >
  $('#btnSendRequest').on('click', function() {
    $.ajax({
      type: "POST",
      url: "/Convertor/Html",
      data: {
        strUrl: "http://make-sense.co.il/kb/avcp-script-installation.pdf"
      },
      success: function(data) {
        return true;
      },
    });
  }); < /script>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
  <title>tester</title>
</head>

<body>
  <h1>tester html</h1>
  <div>
    <input id="btnSendRequest" type="button" value="SendHttpRequest" />

  </div>

我的 ActionResult 函数:“convertor/html”,从网页中获取 url 字符串。 我需要的是当我点击按钮时,pdf文件会自动下载到我的服务器。

public ActionResult Html(string strUrl) 
    {
        return View();
    }

有人知道如何做到这一点吗? 我还在某处读到了一些名为 base64 编码的东西,这可能也是解决方案,但我以前从未使用过它。

提前致谢。

【问题讨论】:

标签: c# .net asp.net-mvc api


【解决方案1】:

您可能正在寻找的是 .NET 上的 WebClient,请参见以下示例,我只是从网上的示例中获取的,完整文章请参见 here

using System;
using System.Net;
using System.IO;

class Program
{
    static void Main()
    {
    using (WebClient client = new WebClient())
    {

        // Download data.
        byte[] arr = client.DownloadData("http://url-to-your-pdf-file.com/file1");

        File.WriteAllBytes(path_to_your_app_data_folder, arr)

    }
    }
}

您需要通过将 byte[] 保存为某个文件来进行进一步处理。上面的示例代码是针对控制台应用程序的,但同样可以在您的 mvc 控制器中实现。

【讨论】:

  • 但是请注意你的代码 sn-p 是一个桌面应用程序,而问题是关于 mvc web 应用程序
  • 我成功通过使用流获取了这个pdf文件的base64。现在我需要将此 base64 字符串转换回 pdf,但我收到一条错误消息,我正在尝试计算
  • 不需要转换为 base64,请考虑使用 WebClient 处理二进制数据以将文件下载到您的服务器。
  • 编辑:我得到了不是 base64 的 StreamReader。我真的被困在这里了。
  • 我已经更新了答案,向您展示如何将文件保存在文件系统中的某个位置。
【解决方案2】:
            var request = System.Net.WebRequest.Create("http://make-sense.co.il/kb/avcp-script-installation.pdf");
            request.Method = "GET";

            using (var response = request.GetResponse())
            {
                using (var stream = response.GetResponseStream())
                {
                    using (var fileStream = System.IO.File.Create(@"path/to/file"))
                    {
                        stream.CopyTo(fileStream);
                    }
                }
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    • 2014-02-12
    • 1970-01-01
    • 2011-06-05
    • 1970-01-01
    相关资源
    最近更新 更多