2013-05-16 32 views
2

我正在閱讀Dropbox API的files_put文檔。dropbox(文件放)api使用什麼內容類型?和如何模仿它?

他們使用的URL路徑是:https://api-content.dropbox.com/1/files_put/<root>/<path>?param=val和請求體保存文件:

需要上傳的文件內容。由於整個PUT主體 將被視爲文件,任何參數必須作爲請求URL的一部分 傳遞。請求網址應該被標記,就像您要對其他OAuth請求網址進行 簽名一樣。

問題

  • 我很好奇,想知道什麼是內容型這種類型的請求? (請求正文中的文件和url字符串中的參數)

  • 此API函數如何模仿?特別是在Grails控制器中。像這樣的東西。

  • 這將如何類型的要求,cURL更新進行測試:我發現瞭如何與捲曲here進行測試。

對於控制器我設想這樣的事情

def save() { 
    withFormt { 
     html {actForHTML} 
     <something> {actForREST} 
    } 
    } 

    def actForREST() { 
    //how can I get access to the file? I guess url parameters can be accessed by `params` 
    } 

回答

1

REST控制檯不必在請求體發送二進制數據的能力。很抱歉,我目前無法訪問curl。但我對你的投入很少,而且我也會在我的個人機器上嘗試。

  • 如何使用curl進行文件上傳? (@source - 捲曲文檔)

    4.3文件上載POST

    早在1995年底,他們定義了另一種方式通過HTTP POST數據。它在RFC 1867中有記載,爲什麼這種方法有時被稱爲 RFC1867-發佈。

    此方法主要用於更好地支持文件上傳。一種形式, 允許上傳文件的用戶可以在HTML中這樣寫:

    <form method="POST" enctype='multipart/form-data' action="upload.cgi"> 
        <input type=file name=upload> 
        <input type=submit name=press value="OK"> 
    </form> 
    

    這清楚地表明,在Content-Type將要發送的 的multipart/form-data的。

    張貼到形式像這樣的捲曲,你輸入一個命令行,如:

    curl --form [email protected] --form press=OK [URL] 
    
  • W3C規範

    看一看W3C規範hereRFC1867爲multipat /形式-data

  • Grails的控制器來處理請求

    您的應用程序應該是ABL e處理multipart/form-data(我認爲不需要MIME類型添加)。您在控制器動作應如下: -

例如:

def uploadFileAndGetParams(){ 
    def inputStream = request.getInputStream() 
    byte[] buf = new byte[request.getHeaders().CONTENT_LENGTH] //Assuming 
    //Read the input stream 
    for (int chunk = inputStream.read(buf); chunk != -1; chunk = is.read(buf)){ 
     //Write it any output stream 
     //Can refer the content-type of the file (following W3C spec) 
     //and create an Output stream accordingly 
    } 

    //Get the params as well 
    //params.foo //params.bar 
} 

它可能不是充分證明,但它應該是比我想象的要那麼複雜。今天我會嘗試一樣的。 Useful post來看看。

+0

謝謝!我仍在研究這個。但是從我發佈的Dropbox API鏈接看來,它好像是通過REST發送文件的權利?因爲它說'由於整個PUT正文將被視爲文件,任何參數都必須作爲請求URL的一部分傳遞.'我會嘗試這種方法,沒有我的機器。如果您發現某些內容,請發帖,我也會這樣做。再次感謝! – Anthony

+0

嘿@Anthony,看看這個[問題](http://stackoverflow.com/questions/4083702/posting-a-file-and-data-to-restful-webservice-as-json)我碰到過。我想你在這裏有你的答案。 – dmahapatro

相關問題