02.07.2012
Для такой задачи потребуется рекурсивный обход вложенных папок, и добавление их в архив. Эту задачу (в данном случае) выполняет функция ZipDirectory, которая вызывается рекурсивно. Функция ZipFull же проверяет, возможно ли создать zip-архив, запускает ZipDirectory и закрывает файл при завершении обхода папок.
function ZipDirectory($src_dir, $zip, $dir_in_archive='') {
$dirHandle = opendir($src_dir);
while (false !== ($file = readdir($dirHandle))) {
if (($file != '.')&&($file != '..')) {
if (!is_dir($src_dir.$file)) {
$zip->addFile($src_dir.$file, $dir_in_archive.$file);
} else {
$zip->addEmptyDir($dir_in_archive.$file);
$zip = ZipDirectory($src_dir.$file.DIRECTORY_SEPARATOR,$zip,$dir_in_archive.$file.DIRECTORY_SEPARATOR);
}
}
}
return $zip;
}
function ZipFull($src_dir, $archive_path) {
$zip = new ZipArchive();
if ($zip->open($archive_path, ZIPARCHIVE::CREATE) !== true) {
return false;
}
$zip = ZipDirectory($src_dir,$zip);
$zip->close();
return true;
}
Использование, например, следующее:
if (ZipFull('D:/test/','D:/result.zip')) {
echo 'Архив успешно создан!';
} else {
echo 'Ошибка при создании архива!';
}
Более подробно про ZipArchive вы можете почитать здесь - http://php.net/manual/en/ziparchive.open.php.
php
02.03.2012
Django при сохранении файла через админку или форму сохраняет название файла. Например, при загрузке картинки "mypic.jpg"
она сохранится с этим названием.
Также, если загружаемый файл на русском языке, то его имя будет сохранено - “моя_картинка.jpg”. Вы можете изменить этот механизм.
ПРИМЕЧАНИЕ. Последующие загружаемые файлы с таким названием будут иметь префикс "_"
, т.е. "_mypic.jpg"
, "__mypic.jpg"
и т.п.
Пример реализации
Этот код должен быть помещен в файл models.py нужного вам приложения.
import os, uuid
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join(instance.directory_string_var, filename)
class MyModelFiles(models.Model):
myimage = models.FileField(upload_to = get_file_path)
directory_string_var = 'my-path-to-files-for-this-model'
class MyModelImages(models.Model):
myimage = models.ImageField(upload_to = get_file_path)
directory_string_var = 'my-path-to-images-for-this-model'
Таким образом, при следующей загрузке файла его имя будет выглядеть, например, так «384408e1-5465-46fd-bf47-61f913fa78e5.jpg»
.
Протестировано на версии Django 1.3.
django
04.02.2012
При создании элементов на сайте или в оффлайн-приложениях часто требуется создать красивые кнопки. Для этого существует множество приложений, но нас интересуют сервисы с аналогичным функционалом в интернете. Смотрим и выбираем, кому что нравится.
Da Button Factory
http://dabuttonfactory.com
У этого сайта одна функция - создание кнопок. Настроек не слишком много, но можно просто и быстро создать неплохие кнопочки.
Аналоги
http://css-tricks.com/examples/ButtonMaker - кнопки без изображения (на css3).
http://jirox.net/AsButtonGen - китайский сервис, настроек больше, чем в Da Button Factory, но менее удобен.
Если вы знаете еще какие-либо онлайн-сервисы для создания кнопок, пожалуйста, оставьте их адреса в комментариях.
дизайн
24.11.2011
Как известно, джанго при загрузке файла сохраняет его имя. Т.е. в имени файла вполне могут быть русские буквы - мы от этого не защищены. Я считаю, что лучше организовать изображения на сайте по хэшам или uuid. Это делается довольно просто, благодаря тому, что в джанго путь к картинке и имя файла можно генерировать функцией.
Давайте посмотрим, как это сделать.
import os, uuid
def get_file_path(instance, filename):
ext = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), ext)
return os.path.join(instance.directory_string_var, filename)
class MyModel(models.Model):
myimage = models.FileField(upload_to = get_file_path)
directory_string_var = 'my-path-to-images-for-this-model'
Таким образом, при следующей загрузке файла его имя будет выглядеть, например, так “384408e1-5465-46fd-bf47-61f913fa78e5.jpg”.
Встретился с данным решением на интересном англоязычном ресурсе stackoverflow.
django