From 4bb5be76d0a939c6bdaf38c0cd4e47c317284d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 10 Aug 2015 09:40:48 +0200 Subject: [PATCH] Do not hiccup on unset Content-Type fields in multipart file uploads Just don't set the content_type parameter in that case. Fixes #985 --- src/octoprint/server/util/tornado.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/octoprint/server/util/tornado.py b/src/octoprint/server/util/tornado.py index 61614ae6..ce1bdd00 100644 --- a/src/octoprint/server/util/tornado.py +++ b/src/octoprint/server/util/tornado.py @@ -360,13 +360,24 @@ class UploadStorageFallbackHandler(tornado.web.RequestHandler): for name, part in self._parts.iteritems(): if "filename" in part: # add form fields for filename, path, size and content_type for all files contained in the request - fields = dict((self._suffixes[key], value) for (key, value) in dict(name=part["filename"], path=part["path"], size=str(os.stat(part["path"]).st_size), content_type=part["content_type"]).iteritems()) + if not "path" in part: + continue + + parameters = dict( + name=part["filename"], + path=part["path"], + size=str(os.stat(part["path"]).st_size) + ) + if "content_type" in part: + parameters["content_type"] = part["content_type"] + + fields = dict((self._suffixes[key], value) for (key, value) in parameters.iteritems()) for n, p in fields.iteritems(): key = name + "." + n self._new_body += b"--%s\r\n" % self._multipart_boundary self._new_body += b"Content-Disposition: form-data; name=\"%s\"\r\n" % key self._new_body += b"\r\n" - self._new_body += p + b"\r\n" + self._new_body += b"%s\r\n" % p elif "data" in part: self._new_body += b"--%s\r\n" % self._multipart_boundary value = part["data"] @@ -924,4 +935,4 @@ def path_validation_factory(path_filter, status_code=404): def f(path): if not path_filter(path): raise tornado.web.HTTPError(status_code) - return f \ No newline at end of file + return f