add webp support for uploadable images
This commit is contained in:
parent
7fc7fe5e82
commit
ad8877f83c
@ -23,7 +23,7 @@ $.fn.imageUpload = function() {
|
||||
$uploadButton.prop('disabled', true);
|
||||
var input = document.createElement('input');
|
||||
input.type = 'file';
|
||||
input.accept = 'image/jpeg, image/png';
|
||||
input.accept = 'image/jpeg, image/png, image/webp';
|
||||
|
||||
input.onchange = function(e) {
|
||||
var reader = new FileReader()
|
||||
|
@ -96,7 +96,7 @@ class OwrxAssetsController(AssetsController):
|
||||
}
|
||||
if file in mappedFiles and ("mapped" not in self.request.query or self.request.query["mapped"][0] != "false"):
|
||||
config = CoreConfig()
|
||||
for ext in ["png", "jpg"]:
|
||||
for ext in ["png", "jpg", "webp"]:
|
||||
user_file = "{}/{}.{}".format(config.get_data_directory(), mappedFiles[file], ext)
|
||||
if os.path.exists(user_file) and os.path.isfile(user_file):
|
||||
return user_file
|
||||
|
@ -36,6 +36,9 @@ class ImageUploadController(AuthorizationMixin, AssetsController):
|
||||
def _is_jpg(self, contents):
|
||||
return contents[0:3] == bytes([0xFF, 0xD8, 0xFF])
|
||||
|
||||
def _is_webp(self, contents):
|
||||
return contents[0:4] == bytes([0x52, 0x49, 0x46, 0x46]) and contents[8:12] == bytes([0x57, 0x45, 0x42, 0x50])
|
||||
|
||||
def processImage(self):
|
||||
if "id" not in self.request.query:
|
||||
self.send_json_response({"error": "missing id"}, code=400)
|
||||
@ -55,8 +58,10 @@ class ImageUploadController(AuthorizationMixin, AssetsController):
|
||||
filetype = None
|
||||
if self._is_png(contents):
|
||||
filetype = "png"
|
||||
if self._is_jpg(contents):
|
||||
elif self._is_jpg(contents):
|
||||
filetype = "jpg"
|
||||
elif self._is_webp(contents):
|
||||
filetype = "webp"
|
||||
if filetype is None:
|
||||
self.send_json_response({"error": "unsupported file type"}, code=400)
|
||||
return
|
||||
|
@ -19,6 +19,7 @@ from owrx.breadcrumb import Breadcrumb, BreadcrumbItem
|
||||
from owrx.controllers.settings import SettingsBreadcrumb
|
||||
import shutil
|
||||
import os
|
||||
import re
|
||||
from glob import glob
|
||||
|
||||
import logging
|
||||
@ -175,7 +176,7 @@ class GeneralSettingsController(SettingsFormController):
|
||||
config = CoreConfig()
|
||||
if data[image_id] == "restore":
|
||||
# remove all possible file extensions
|
||||
for ext in ["png", "jpg"]:
|
||||
for ext in ["png", "jpg", "webp"]:
|
||||
try:
|
||||
os.unlink("{}/{}.{}".format(config.get_data_directory(), image_id, ext))
|
||||
except FileNotFoundError:
|
||||
@ -184,8 +185,14 @@ class GeneralSettingsController(SettingsFormController):
|
||||
if not data[image_id].startswith(image_id):
|
||||
logger.warning("invalid file name: %s", data[image_id])
|
||||
else:
|
||||
# get file extension (luckily, all options are three characters long)
|
||||
ext = data[image_id][-3:]
|
||||
# get file extension (at least 3 characters)
|
||||
# should be all lowercase since they are set by the upload script
|
||||
pattern = re.compile(".*\\.([a-z]{3,})$")
|
||||
matches = pattern.match(data[image_id])
|
||||
if matches is None:
|
||||
logger.warning("could not determine file extension for %s", image_id)
|
||||
else:
|
||||
ext = matches.group(1)
|
||||
data_file = "{}/{}.{}".format(config.get_data_directory(), image_id, ext)
|
||||
temporary_file = "{}/{}".format(config.get_temporary_directory(), data[image_id])
|
||||
shutil.copy(temporary_file, data_file)
|
||||
|
Loading…
Reference in New Issue
Block a user