2014-07-09 74 views
1

最近,我一直在嘗試使用Elisp通過HTTP請求與本地CouchDB數據庫進行通信。發送和接收JSON的效果很好,但當我嘗試將附件上傳到文檔時,我遇到了一些障礙。在CouchDB的教程,他們用這個curl命令上傳附件:Emacs Lisp - 如何通過HTTP傳輸二進制文件?

curl -vX PUT http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg?rev=2-2739352689 \ 
--data-binary @artwork.jpg -H "Content-Type:image/jpg" 

有誰知道我怎麼會去使用內置url包來實現這一目標?我知道可以使用多部分MIME請求進行上傳。有關它的emacs-request手冊中有a section。但是我也讀到,CouchDB不支持multipart/form-data作爲其公共API的一部分,儘管被褥使用它。

回答

1

我認爲你需要在呼叫周圍使用url-retrieve並綁定url-request-method"PUT"。 您還需要綁定url-request-data到您的數據:

(let ((url-request-data (with-temp-buffer 
          (insert-file-contents "artwork.jpg") 
          (buffer-substring-no-properties (point-min) (point-max))))) 
    (url-retrieve "http://127.0.0.1:5984/albums/6e1295ed6c29495e54cc05947f18c8af/artwork.jpg?rev=2-2739352689")) 

請另見

您也可能會發現通過閱讀the sources啓發。

+0

我試過這個;然而,我不知道該怎麼設置'url-request-data'。我嘗試以二進制讀取文件並將其放入'url-request-data'中;然而,這沒有奏效。我認爲它只需要文本編碼數據。你有什麼想法嗎? – sonelliot

+0

@sonelliot:見編輯 – sds

+0

最後設法測試這個。這麼晚纔回復很抱歉!作品魅力謝謝! – sonelliot