浏览代码

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 年前
父节点
当前提交
e287fa1bd6
共有 2 个文件被更改,包括 30 次插入6 次删除
  1. +21
    -5
      frappe/core/doctype/file/file.py
  2. +9
    -1
      frappe/utils/nestedset.py

+ 21
- 5
frappe/core/doctype/file/file.py 查看文件

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


class FolderNotEmpty(frappe.ValidationError): pass class FolderNotEmpty(frappe.ValidationError): pass


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


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

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


else: else:
# downlaod # downlaod
import requests, StringIO
file_url = frappe.utils.get_url(self.file_url) file_url = frappe.utils.get_url(self.file_url)
r = requests.get(file_url, stream=True) 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)) image = Image.open(StringIO.StringIO(r.content))
filename, extn = self.file_url.rsplit("/", 1)[1].rsplit(".", 1) 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)) filename = "/files/" + strip(urllib.unquote(filename))


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


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


def on_doctype_update(): def on_doctype_update():


+ 9
- 1
frappe/utils/nestedset.py 查看文件

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


self.set(self.nsm_parent_field, "") 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"): def before_rename(self, olddn, newdn, merge=False, group_fname="is_group"):
if merge: if merge:


正在加载...
取消
保存