(including Content-Length and Content-Type). When the method is FTP,
a Content-Length header will be present if (as is now usual) the
server passed back a file length in response to the FTP retrieval
-request. When the method is local-file, returned headers will include
+request. A Content-Type header will be present if the MIME type can
+be guessed. When the method is local-file, returned headers will include
a Date representing the file's last-modified time, a Content-Length
giving file size, and a Content-Type containing a guess at the file's
type. See also the description of the
def open_ftp(self, url):
"""Use FTP protocol."""
+ import mimetypes, mimetools, StringIO
host, path = splithost(url)
if not host: raise IOError, ('ftp error', 'no host given')
host, port = splitport(host)
value in ('a', 'A', 'i', 'I', 'd', 'D'):
type = value.upper()
(fp, retrlen) = self.ftpcache[key].retrfile(file, type)
+ mtype = mimetypes.guess_type("ftp:" + url)[0]
+ headers = ""
+ if mtype:
+ headers += "Content-Type: %s\n" % mtype
if retrlen is not None and retrlen >= 0:
- import mimetools, StringIO
- headers = mimetools.Message(StringIO.StringIO(
- 'Content-Length: %d\n' % retrlen))
- else:
- headers = noheaders()
+ headers += "Content-Length: %d\n" % retrlen
+ headers = mimetools.Message(StringIO.StringIO(headers))
return addinfourl(fp, headers, "ftp:" + url)
except ftperrors(), msg:
raise IOError, ('ftp error', msg), sys.exc_info()[2]