1

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

现在,我使用基本的 HTML 输入 type="file" 来允许用户从他们的本地机器中选择一个文件。有没有一种简单的方法可以让我从提供的 Web 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”框中。

4

1 回答 1

0

您可以做的一件事是使用 JavaScript 从提供的 Web URL 下载文件,然后上传。我在这里查看了 Zendesk 的附件 API 的文档。当你调用“ https://instance.zendesk.com/api/v2/uploads.json ”上传文件时,你可以在数据区放任何你想要的文件内容。

就您而言,您可以使用$.get(url)从提供的 Web URL 获取内容,然后将内容包含在发布请求中。(我没有 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 下载文件可能会很困难。


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

于 2019-09-16T19:48:47.683 回答