Ver código fonte

Merge pull request #1354 from anandpdoshi/image-extn-detection

[fix] detect image extension from content headers if extension isn't of image type
version-14
Nabin Hait 9 anos atrás
pai
commit
e287fa1bd6
2 arquivos alterados com 30 adições e 6 exclusões
  1. +21
    -5
      frappe/core/doctype/file/file.py
  2. +9
    -1
      frappe/utils/nestedset.py

+ 21
- 5
frappe/core/doctype/file/file.py Ver arquivo

@@ -16,6 +16,12 @@ from frappe.utils.nestedset import NestedSet
from frappe.utils import strip
import json
import urllib
from PIL import Image, ImageOps
import os
import requests
import requests.exceptions
import StringIO
import mimetypes, imghdr

class FolderNotEmpty(frappe.ValidationError): pass

@@ -119,9 +125,6 @@ class File(NestedSet):
self.delete_file()

def make_thumbnail(self):
from PIL import Image, ImageOps
import os

if self.file_url:
if self.file_url.startswith("/files"):
try:
@@ -132,12 +135,24 @@ class File(NestedSet):

else:
# downlaod
import requests, StringIO
file_url = frappe.utils.get_url(self.file_url)
r = requests.get(file_url, stream=True)
r.raise_for_status()
try:
r.raise_for_status()
except requests.exceptions.HTTPError, e:
if "404" in e.args[0]:
frappe.msgprint(_("File '{0}' not found").format(self.file_url))

raise

image = Image.open(StringIO.StringIO(r.content))
filename, extn = self.file_url.rsplit("/", 1)[1].rsplit(".", 1)

mimetype = mimetypes.guess_type(filename + "." + extn)[0]
if mimetype is None or not mimetype.startswith("image/"):
# detect file extension by reading image header properties
extn = imghdr.what(filename + "." + extn, h=r.content)

filename = "/files/" + strip(urllib.unquote(filename))

thumbnail = ImageOps.fit(
@@ -192,6 +207,7 @@ class File(NestedSet):
delete_file_data_content(self, only_thumbnail=True)

def on_rollback(self):
self.flags.on_rollback = True
self.on_trash()

def on_doctype_update():


+ 9
- 1
frappe/utils/nestedset.py Ver arquivo

@@ -201,7 +201,15 @@ class NestedSet(Document):
frappe.throw(_("Cannot delete {0} as it has child nodes").format(self.name), NestedSetChildExistsError)

self.set(self.nsm_parent_field, "")
update_nsm(self)

try:
update_nsm(self)
except frappe.DoesNotExistError:
if self.flags.on_rollback:
pass
frappe.message_log.pop()
else:
raise

def before_rename(self, olddn, newdn, merge=False, group_fname="is_group"):
if merge:


Carregando…
Cancelar
Salvar