Commit 45148856 authored by 's avatar

Fixed brain-dead bug in content-type handling for Images/Files.

parent ae7f1f7f
...@@ -102,7 +102,7 @@ ...@@ -102,7 +102,7 @@
############################################################################## ##############################################################################
"""Image object""" """Image object"""
__version__='$Revision: 1.54 $'[11:-2] __version__='$Revision: 1.55 $'[11:-2]
import Globals, string, struct, mimetypes, content_types import Globals, string, struct, mimetypes, content_types
from Globals import HTMLFile, MessageDialog from Globals import HTMLFile, MessageDialog
...@@ -167,13 +167,16 @@ class File(Persistent,Implicit,PropertyManager, ...@@ -167,13 +167,16 @@ class File(Persistent,Implicit,PropertyManager,
self.title=title self.title=title
self.precondition=precondition self.precondition=precondition
headers=hasattr(file, 'headers') and file.headers or None headers=hasattr(file, 'headers') and file.headers or None
if (headers is None) and (not content_type): data=(headers is None) and file or file.read()
raise 'Bad Request', 'No content type specified.' if headers and headers.has_key('content-type') and (not content_type):
if headers and headers.has_key('content-type'):
content_type=headers['content-type'] content_type=headers['content-type']
if not content_type: if not content_type:
raise 'Bad Request', 'No content type specified.' content_type, enc=mimetypes.guess_type(id)
data=(headers is None) and file or file.read() if not content_type:
if content_types.find_binary(data) >= 0:
content_type='application/octet-stream'
else: content_type=content_types.text_type(data)
content_type=string.lower(content_type)
self.update_data(data, content_type) self.update_data(data, content_type)
def id(self): def id(self):
...@@ -232,10 +235,19 @@ class File(Persistent,Implicit,PropertyManager, ...@@ -232,10 +235,19 @@ class File(Persistent,Implicit,PropertyManager,
The file or images contents are replaced with the contents of 'file'. The file or images contents are replaced with the contents of 'file'.
""" """
if file.headers.has_key('content-type'):
content_type=file.headers['content-type'] headers=hasattr(file, 'headers') and file.headers or None
else: content_type=None data=(headers is None) and file or file.read()
self.update_data(file.read(), content_type) if headers and headers.has_key('content-type'):
content_type=headers['content-type']
if not content_type:
content_type, enc=mimetypes.guess_type(self.id())
if not content_type:
if content_types.find_binary(data) >= 0:
content_type='application/octet-stream'
else: content_type=content_types.text_type(data)
content_type=string.lower(content_type)
self.update_data(data, content_type)
if REQUEST: return MessageDialog( if REQUEST: return MessageDialog(
title ='Success!', title ='Success!',
message='Your changes have been saved', message='Your changes have been saved',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment