调用API接口下载文件的两种实现方式GET POST

  1. 发送参数ids长度过长,选择post形式发送请求
  2. get
    1. 获取url
      buildURL(url, params) {
          if (!params) {
              return url
          }
      
          var serializedParams
          if (isURLSearchParams(params)) {
              serializedParams = params.toString()
          } else {
              var parts = []
              forEach(params, function serialize (val, key) {
                  if (val === null || typeof val === 'undefined') {
                      return
                  }
                  if (isArray(val)) {
                      key = key + '[]'
                  } else {
                      val = [val]
                  }
                  forEach(val, function parseValue (v) {
                      if (isDate(v)) {
                          v = v.toISOString()
                      } else if (isObject(v)) {
                          v = JSON.stringify(v)
                      }
                      parts.push(encode(key) + '=' + encode(v))
                  })
              })
              serializedParams = parts.join('&')
          }
          if (serializedParams) {
              var hashmarkIndex = url.indexOf('#')
              if (hashmarkIndex !== -1) {
                  url = url.slice(0, hashmarkIndex)
              }
              url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams
          }
          return url
      }

       

    2. iframe下载文件
      downLoadFiles = (srcPath) => {
          var iframe = document.getElementById('hiddenDownloader')
          if (iframe === null) {
              iframe = document.createElement('iframe')
              iframe.id = 'hiddenDownloader'
              iframe.style.display = 'none'
              document.body.appendChild(iframe)
          }
          iframe.src = srcPath
      }
    3. 调用下载方法
      let params = { ids: ids }
      var srcPath = this.buildURL(`/api/compass/export/history/download`, params)
      this.downLoadFiles(srcPath)
  3. post
    1. axios调用后台API接口获取数据
      this.$axios.request({
          method:'post',
          url:'/api//files/filesearch/download',
          data:{
            ids:[
              "53ba3fefeb4086a05b805ac9a745a011",
              "c8ca2aea8ff822f928903522fe7457c3",
              "fd7baec6fff7e73c1817dcf4743ac2ba",
              "327dd01cb5351f1fa0537d909b5e9000"
            ]
          },
          responseType:'arraybuffer'// 下载文件可以打开
        }).then((response)=>{
          this.download(response.data);// 请求成功回调 ,将获取的下载文件数据返回
        })
      }
    2. 创建临时blob的url
       let url = window.URL.createObjectURL(new Blob([data]))

       

    3. 创建隐藏下载元素,指定href为blob的url
      let link = document.createElement('a') // 创建一个超链接
      link.style.display = 'none' // 隐藏元素显示
      link.href = url // 设置元素路径
      link.download = 'download_' + new Date().valueOf() + '.zip' // 下载后文件名
      link.click() // 下载文件
      document.body.removeChild(link)// 下载完成移除元素
      window.URL.revokeObjectURL(url)// 释放掉blob对象
    4. 完整代码
      getDownloadData () {
        this.$axios.request({
          method: 'post',
          url: '/api//files/filesearch/download',
          data: {
            ids: [
              '53ba3fefeb4086a05b805ac9a745a011',
              'c8ca2aea8ff822f928903522fe7457c3',
              'fd7baec6fff7e73c1817dcf4743ac2ba',
              '327dd01cb5351f1fa0537d909b5e9000'
            ]
          },
          responseType: 'arraybuffer'// 下载文件可以打开
        }).then((response) => {
          this.download(response.data)// 请求成功回调 ,将获取的下载文件数据返回
        })
      },
      download(data){
        if (!data) {
          return
        }
        let url = window.URL.createObjectURL(new Blob([data]))
        let link = document.createElement('a')
        link.style.display = 'none'
        link.href = url
        link.download = 'download_' + new Date().valueOf() + '.zip'
        link.click()
        document.body.removeChild(link)
        window.URL.revokeObjectURL(url)
      }


       
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在安卓开发中,调用API接口通常使用HTTP请求来发送和接收数据。HTTP请求有两种常用的方式:GET和POST。 如果请求方式POST,需要向API接口提交参数。这时候需要使用HTTP请求体来传递参数。以下是一个简单的POST请求示例: ```java URL url = new URL("http://example.com/api"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoOutput(true); // 构造请求参数 String params = "param1=value1&param2=value2"; OutputStream outputStream = conn.getOutputStream(); outputStream.write(params.getBytes()); outputStream.flush(); outputStream.close(); // 获取响应结果 BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream())); String line; StringBuilder response = new StringBuilder(); while ((line = reader.readLine()) != null) { response.append(line); } reader.close(); String result = response.toString(); ``` 在这个示例中,我们首先创建一个URL对象,并打开连接。然后设置请求方法为POST,并允许输出请求体。接着构造请求参数,并将其写入输出流中。最后获取响应结果,并将其以字符串形式返回。 需要注意的是,在发送POST请求时,需要在请求头中设置Content-Type为application/x-www-form-urlencoded,以告诉API接口请求体的格式。可以使用以下代码设置请求头: ```java conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); ``` 除了使用HttpURLConnection,还可以使用第三方库,比如OkHttp、Retrofit等来发送HTTP请求。这些库封装了HTTP请求的细节,让开发者能够更方便地发送HTTP请求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值