2013-07-09 158 views
1

我有一個共享給我下載的Dropbox鏈接,但不像其他鏈接,它說我被禁止下載它。R Dropbox文件下載

我的功能:

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的功能可以同時執行私人和公共文件。

感謝

+0

一個例子的.rda文件,但也許內容不符合他們的公共文件夾中。 –

+0

我試過從我的Dropbox中的私人文件夾下載內容。看起來好像鏈接完全不同 – user1234440

+0

嘗試[別人的代碼](https://github.com/karthikram/rDrop)。 – Thomas

回答

0

這裏的關鍵是

  1. 告訴Dropbox的通過附加?raw=1的URL就可以提供原始文件
  2. 如Dropbox的使用HTTPS,你(目前至少)需要打開該連接(其足夠聰明以使用安全傳輸)並且將該連接賦予文件讀取或加載功能(不僅是原始URL字符串)

T他是用load和同一作品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()