如何在没有Google云端硬盘的情况下直接从Google云端硬盘下载大文件,无法扫描此文件中的病毒邮件

时间:2018-01-15 06:33:43

标签: ios swift avplayer nsurl

我正在尝试在我的Google驱动器中播放音乐文件,但它大约是300mb,因此Google不会让我直接使用此链接下载它。

https://drive.google.com/uc?export=download&id=12cpUAP0wy8jyMD4-rjKJ23bicCJ29Cs-

有一个“谷歌驱动器无法扫描此文件消息”并无论如何下载按钮。然后,我使用Chrome检查了下载任何按钮,并看到了这个链接:

https://drive.google.com/uc?export=download&confirm=9iBg&id=12cpUAP0wy8jyMD4-rjKJ23bicCJ29Cs-

所以我尝试使用下面的func播放音频并且它有效

audioPlayer = AVPlayer(url: url)

然而,来自下载的网址按钮仍然从confirm = 9iBg变为确认= ????这使得无法再次播放音频,除非我必须转到我的代码并手动更改该ID。这个问题有方法解决吗?谢谢!

2 个答案:

答案 0 :(得分:0)

不幸的是,如果没有确认窗口就无法完成,很可能令牌&confirm=9iBg&id=12cpUAP0wy8jyMD4-rjKJ23bicCJ29Cs-有一个到期日期,并且只能通过确认窗口续订。

答案 1 :(得分:0)

我今天在解决同样的问题时想出了一个解决方案。我正在使用 shell 从谷歌驱动器自动下载文件。关键是设置一个cookie,从第一次下载尝试结果html页面内容中动态获取确认码:

printf "${WHITE}Downloading ${fileNames[$i]}${NC}\n"
curl -L -c mycookie -o temp "https://drive.google.com/uc?export=download&id=${fileLinks[$i]}"
filesize=$(wc -c temp | awk '{print $1}')
if [ $filesize -gt 10000 ]; then
  printf "Finish downloading\n"
  mv temp "${fileNames[$i]}.tar.gz"
else
  content=$(cat temp)
  for (( j=0; j<$filesize-10; j++)); do
    if [ "${content:$j:8}" == "confirm=" ]; then
      for (( k=0; k<10; k++)); do
        if [ "${content:$j+8+$k:1}" == "&" ]; then
          token=${content:$j+8:$k}
        fi
      done
    fi
  done
  printf "Confirm downloading with token ${token}\n"
  curl -L -b mycookie -o "${fileNames[$i]}.tar.gz" "https://drive.google.com/uc?export=download&confirm=${token}&id=${fileLinks[$i]}"
  rm mycookie
  rm temp
fi