Function: mm-url-encode-multipart-form-data
mm-url-encode-multipart-form-data is a byte-compiled function defined
in mm-url.el.gz.
Signature
(mm-url-encode-multipart-form-data DATA &optional BOUNDARY)
Documentation
Return DATA encoded in multipart/form-data.
DATA is a list where the elements can have the following form:
("NAME" . "VALUE")
("submit")
("file" . (("name" . "NAME")
("filename" . "FILENAME")
("content-type" . "CONTENT-TYPE")
("filedata" . "FILEDATA")))
Lowercase strings above are literals and uppercase are not.
Source Code
;; Defined in /usr/src/emacs/lisp/gnus/mm-url.el.gz
(defun mm-url-encode-multipart-form-data (data &optional boundary)
"Return DATA encoded in multipart/form-data.
DATA is a list where the elements can have the following form:
(\"NAME\" . \"VALUE\")
(\"submit\")
(\"file\" . ((\"name\" . \"NAME\")
(\"filename\" . \"FILENAME\")
(\"content-type\" . \"CONTENT-TYPE\")
(\"filedata\" . \"FILEDATA\")))
Lowercase strings above are literals and uppercase are not."
;; RFC1867
;; Get a good boundary.
(unless boundary
(setq boundary (mml-compute-boundary '())))
(with-temp-buffer
(set-buffer-multibyte nil)
(dolist (elem data)
(let ((name (car elem))
(value (cdr elem)))
(insert "--" boundary "\r\n")
(cond
((equal name "file")
(insert (format
"Content-Disposition: form-data; name=%S; filename=%S\r\n"
(or (cdr (assoc "name" value)) name)
(cdr (assoc "filename" value))))
(insert "Content-Transfer-Encoding: binary\r\n")
(insert (format "Content-Type: %s\r\n\r\n"
(or (cdr (assoc "content-type" value))
"text/plain")))
(let ((filedata (cdr (assoc "filedata" value))))
(cond
((stringp filedata)
(insert filedata))
;; How can this possibly be useful?
((integerp filedata)
(insert (number-to-string filedata))))))
((equal name "submit")
(insert
"Content-Disposition: form-data; name=\"submit\"\r\n\r\nSubmit\r\n"))
(t
(insert (format "Content-Disposition: form-data; name=%S\r\n\r\n"
name))
(insert value)))
(unless (bolp)
(insert "\r\n"))))
(insert "--" boundary "--\r\n")
(buffer-string)))