Emacs Lisp - 如何通过HTTP传输二进制文件?

时间:2014-07-09 00:03:46

标签: http emacs couchdb elisp file-transfer

最近,我一直在尝试使用Elisp通过HTTP请求与本地CouchDB数据库进行通信。发送和接收JSON很有效,但是当我尝试将附件上传到文档时,我遇到了一些障碍。在CouchDB教程中,他们使用此curl命令上传附件:

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的一部分,即使Futon在引擎盖下使用它。

1 个答案:

答案 0 :(得分:2)

我认为您需要使用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找到启发。