【问题标题】:Read file with javascript and send it to server使用 javascript 读取文件并将其发送到服务器
【发布时间】:2017-11-26 22:55:05
【问题描述】:

我正在使用 google drive api,我正在尝试从 url 下载文件,将其设置为变量并将其发送到后端。请注意,我使用 Google Drive 的 javascript 选择器。

旁注:首先我尝试将id_tokenfileId 发送到后端并尝试访问该文件,但我无法通过相关范围对用户进行身份验证,因为用户在 javascript 而非 php 中进行了身份验证。

所以我决定用 axios 获取文件并将其保存到一个变量中,然后将文件发送到我的后端。

var downloadUrl = typeof file.exportLinks !== 'undefined' ? 
                file.exportLinks['application/pdf'] : file.webContentLink

axios.get(downloadUrl, {
          headers: {
              Authorization: 'bearer ' + gapi.client.getToken().access_token,
             'Access-Control-Allow-Origin': '*'
          }
 }).then(function (response) {
      console.log(response)
 }).catch(function (error) {
      console.log(error);
 });

我试过用这个,但是这个会抛出

无法加载https://drive.google.com/uc?id=aba123bab23r24-m9_Mp4aiDcnibNf&export=download:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://deftfax.app' 因此不允许访问。

使用 axios,如何从 url 下载文件并将其设置为变量?

【问题讨论】:

标签: javascript vue.js google-api google-drive-api


【解决方案1】:

支持使用 Drive API 下载文件的操作已记录在 Download Files

根据您要执行的下载类型(文件、Google 文档或内容链接),您将使用以下网址之一:

  • 下载文件 — files.get with alt=media file resource
  • 下载并导出 Google 文档 — files.export
  • 将用户链接到文件 - 来自文件资源的 webContentLink

我自己可以通过 webcontentlink 使用 Picker API 下载图像文件:

function downloadImage(data) {
      if (data.action == google.picker.Action.PICKED) {

        var fileId = data.docs[0].id; 
        var webcontentlink = ' https://docs.google.com/uc?id='+fileId+'&export=download'

        window.open( webcontentlink,'image/png');
      }
}

希望您开始实施。

【讨论】:

  • 是的,但是此时,我需要将它发送到我的后端服务器以下载文件,因为我使用选择器时,用户实际上并没有在我的后端进行身份验证,因此我不能在我的后端下载文件。您的方法有效,但我需要将此文件分配到一个变量中并将其发送到 Post 请求中。是否可以在前端使用 javascript 下载文件,然后在帖子中将其发送到后端,就像“来自文件类型输入的文件”一样?
猜你喜欢
  • 2013-01-26
  • 1970-01-01
  • 2015-10-14
  • 2013-09-24
  • 1970-01-01
  • 1970-01-01
  • 2018-08-30
  • 2020-07-08
  • 2014-06-22
相关资源
最近更新 更多