1

我有一个分享给我下载的保管箱链接,但与其他链接不同,它说我被禁止下载它。

我的职能:

source_DropboxData <- function(file, key, sha1 = NULL, sep = ",", header = TRUE){
  URL <- paste0('https://dl.dropboxusercontent.com/s/', 
            key, '/', file)

  stopifnot(is.character(URL), length(URL) == 1)

  temp_file <- tempfile()
  on.exit(unlink(temp_file))

  request <- GET(URL)
  stop_for_status(request)
  writeBin(content(request, type = "raw"), temp_file)

  file_sha1 <- digest(file = temp_file, algo = "sha1")

  if (is.null(sha1)) {
    message("SHA-1 hash of file is ", file_sha1)
  }
  else {
    if (!identical(file_sha1, sha1)) {
      stop("SHA-1 hash of downloaded file (", file_sha1, 
       ")\n  does not match expected value (", sha1, 
           ")", call. = FALSE)
    }
  }

  read.table(temp_file, sep = sep, header = header)
}    

我的链接如下所示:

https://www.dropbox.com/sh/od6ymc4wu8uht5e/IxPX-EOhNx/a%b%x  #fake, for demonstration

正式的看起来像这样:

http://dl.dropbox.com/s/c18lcwnnrodsevt/test_dropbox_source.R

我的问题是这两个链接有什么区别,一个安全且不可下载,而另一个是可能的?我的印象是 repmis 的功能既可以处理私有文件,也可以处理公共文件。

谢谢

4

1 回答 1

1

这里的关键是

  1. ?raw=1告诉 Dropbox 通过附加到 URL来提供原始文件
  2. 由于 dropbox 使用 https,您(目前至少)需要打开连接(它足够智能以使用安全传输)并将此连接提供给文件读取或加载功能(不仅仅是原始 URL 字符串)

这是一个使用load.rda文件的示例,但同样适用于read.csv等。

myURL = "https://www.dropbox.com/s/randomIDstring/YourFilename.rda?raw=1"
myConnection = url(myURL)
print(load(myConnection))
close(myConnection) # good practice to close connection opened by url()
于 2017-04-03T15:11:06.243 回答