從今年的 3/15 開始,Dropbox 原本的公開資料夾就失效了

放在裡面的檔案的公開連結也都不再能用。

但像我有在圖書館多重帳戶登入這個 app 裡面,去讀取 Dropbox 的一個公開檔案,

這下子掛點了,只好趕緊找解法~

 

首先對著要取得 Dropbox 分享連結的檔案按右鍵 > Copy Dropbox Link:

Screen Shot 2017-04-01 at 12.31.45 AM  

 

像我取得的連結是:

https://www.dropbox.com/s/mdxf2ng8xlegivc/NewTaipeiCityLibraryMultiLogin_LibraryOffDates.json?dl=0

我分享的這個檔案是一個 json 檔,

但是如果直接在 Chrome 裡面打開這個網址,會變成 Dropbox 的預覽頁面:

Screen Shot 2017-04-01 at 12.50.09 AM  

 

這樣的話,我的 app 去讀取這個網址,拿到的就不是預期中的 json 檔案,

而是一個包含 Dropbox 預覽頁面的 HTML 檔了,怎麼辦呢?

 

參考 Dropbox Help: Force a file or folder to download, or to render on dropbox.com

原來只要將網址中的 dl=0 改成 dl=1,也就是原本的網址換成

https://www.dropbox.com/s/mdxf2ng8xlegivc/NewTaipeiCityLibraryMultiLogin_LibraryOffDates.json?dl=1

就會直接下載檔案了~

從 Dropbox Help 裡,看到還有另一個 raw=1 的參數,

說是使用這個參數的話,瀏覽器就會試著直接顯示檔案的內容。

 

試了一下,在我的 app 裡面,不管是 dl=1 或是 raw=1 都能成功的讀取到 Dropbox 中的 json 檔案~

但這兩種網址究竟有什麼差別,為什麼瀏覽器的行為會不一樣呢?

 

試著用 curl 去打打看這兩個網址:

curl -v -L -A "Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30" https://www.dropbox.com/s/mdxf2ng8xlegivc/NewTaipeiCityLibraryMultiLogin_LibraryOffDates.json?raw=1

 

比較了一下,兩個網址吐回來的 HTTP header 是不一樣的,

自動下載的那個裡面有 content-disposition: attachment,

而在瀏覽器裡直接顯示 json 的那個裡面有 content-disposition: inline~

使用 content-disposition: attachment 的話,瀏覽器一看就會下載檔案;

使用 content-disposition: inline 的話,就是讓瀏覽器直接顯示檔案內容囉~

 

參考資料:

MDN: Content-disposition

 

文章標籤
創作者介紹

亂打一通的心情日記

ephrain 發表在 痞客邦 PIXNET 留言(0) 人氣()