如何用网络 URL 替换 HTML 文件输入?

How do I replace a HTML file input with a web URL?

我正在尝试使用 Zendesk API 将文件作为支持票的附件上传。我可以成功上传本地文件,但有时,我需要从其他工单中复制附件。

现在,我正在使用基本的 HTML 输入 type="file" 来允许用户从他们的本地机器 select 一个文件。有没有一种简单的方法可以让我以完全相同的格式从提供的网络 URL 获取文件?

我用文本输入替换实际输入没有问题,我只是不知道如何在 URL 处实际处理文件以获取我需要的格式。

谢谢!

我曾尝试在 XMLHttpRequest 函数上使用 fetch() 和 FileReader,但我不知道我究竟需要做什么来处理从这些函数返回给我的内容。

<body>
  <label for="data">Select file:</label>
  <input type="file" name="data[]" id="data" multiple>
  <button type="button" onclick="uploadfile()">Upload file now...</button>
  </br></br>
  <label>Token value:</label>
  <input type="text" id='token_value_from_upload' style="width: 220px;">

<script>
 function uploadfile() {
      //retrieve the uploaded file
      var file = data.files[0];

      console.log(file.type);

      $.ajax({
        url: "https://instance.zendesk.com/api/v2/uploads.json?filename=" + file.name,
        type: 'POST',
        data: file,
        dataType: 'json',
        processData: false,
        contentType: 'application/binary',
        headers: {
          "Authorization": TOKEN
        },
        success: function(response) {
          console.log(response);
          document.getElementById('token_value_from_upload').value = response.upload.token;
        }
      });
    }
</script>
</body>

uploadfile 函数应该为文件取一个 web URL,将文件上传到 Zendesk,并将返回的令牌放在 "token_value_from_upload" 框中。

您可以做的一件事是使用 JavaScript 从提供的网站 URL 下载文件,然后上传。 Zendesk's Attachments API here. When you call "https://instance.zendesk.com/api/v2/uploads.json的文档我查了下上传一个文件,你可以把你想要的文件内容放在数据区。

对于您的情况,您可以使用 $.get(url) 从提供的网站 URL 获取内容,然后将内容包含在 post 请求中。 (我没有 Zendesk 帐户,所以我没有测试我的代码。)

function download(url) {
    $.get(url).success(function (data) {
        upload("test.txt", data);
    });
}

function upload(name, data) {
    $.ajax({
    url: "https://instance.zendesk.com/api/v2/uploads.json?filename=" + name,
    type: 'POST',
    data: data, // put the file content here
    dataType: 'json',
    processData: false,
    contentType: 'plain/text',
    headers: {
      "Authorization": TOKEN
    },
    success: function(response) {
      console.log(response);
      document.getElementById('token_value_from_upload').value = response.upload.token;
    }
});
}

但是请注意,由于 CORS 政策,可能很难通过 JavaScript 下载文件。


解决此问题的另一种方法,我注意到您提到要从其他工单复制附件。您可以尝试只将之前上传的文件的令牌包含到新案例中,而不是下载并重新上传文件。您可以查看 this post 了解详细信息。您需要做的就是找到文件的令牌并将其包含在新案例中。