Как настроить загрузку файлов в определенную папку

Обновлено: 21.11.2024

Такого рода проверка особенно важна, если есть шанс, что какие-либо действия с загруженными файлами могут раскрыть их содержимое пользователю или даже другим пользователям той же системы.

Параметры

Имя загруженного файла.

Место назначения перемещенного файла.

Возвращаемые значения

В случае успеха возвращает true.

Если from не является допустимым файлом для загрузки, никаких действий не произойдет, и функция move_uploaded_file() вернет значение false .

Если from является допустимым файлом для загрузки, но его нельзя переместить по какой-либо причине, никаких действий не произойдет, и функция move_uploaded_file() вернет значение false . Кроме того, будет выдано предупреждение.

Примеры

= '/uploads' ;
foreach ( $_FILES [ "изображения" ][ "ошибка" ] as $key => $error ) if ( $error == UPLOAD_ERR_OK ) $tmp_name = $_FILES [ " картинки" ][ "tmp_name" ][ $key ];
// basename() может предотвратить атаки обхода файловой системы;
// может потребоваться дополнительная проверка/очистка имени файла
$name = basename ( $_FILES [ "pictures" ][ "name" ][ $key ]);
move_uploaded_file ($tmp_name, "$uploads_dir / $name");
>
>
?>

Примечания

Примечание:

move_uploaded_file() поддерживает open_basedir. Однако ограничения накладываются только на путь к, чтобы разрешить перемещение загруженных файлов, в которых могут возникнуть конфликты с такими ограничениями. move_uploaded_file() обеспечивает безопасность этой операции, позволяя перемещать только файлы, загруженные через PHP.

Если целевой файл уже существует, он будет перезаписан.

См. также

Пользовательские заметки 40 заметок

Советы по безопасности, которые вы должны знать перед использованием этой функции:

Во-первых, убедитесь, что файл не пустой.

Во-вторых: убедитесь, что имя файла состоит из английских букв, цифр и символов (_-.) для большей защиты.

Вы можете использовать функцию ниже, как в примере

/**
* Check $_FILES[][name]
*
* @param (string) $filename — имя загруженного файла.
* @author Yousef Ismaeil Cliprz
*/
function check_file_uploaded_name ( $filename )
(bool) (( preg_match ( "`^[-0-9A-Z_\.] +$`i" , $filename )) ? true : false );
>

?>

Третье: убедитесь, что имя файла не превышает 250 символов.

/**
* Проверить длину $_FILES[][name].
*
* @param (string) $filename - Имя загруженного файла.
* @author Yousef Ismaeil Cliprz.
*/
функция check_file_uploaded_length ( $filename )
return (bool) (( mb_strlen ( $filename , "UTF-8") > 225 ) ? true : false );
>

или вы можете использовать регулярное выражение для проверки расширений файлов, как в примере

или используйте проверку in_array как

= массив( 'gif' , 'jpg' , 'jpe' , 'jpeg' , 'png' );

?>

У вас есть несколько вариантов проверки расширений и типов Mime.

Вы можете использовать .htaccess, чтобы остановить работу некоторых скриптов, например, файл php в пути загрузки.

AddHandler cgi-script .php .pl .jsp .asp .sh .cgi
Параметры -ExecCGI

Не забывайте об этих шагах для защиты вашего проекта.

Для тех, кто использует PHP в Windows и IIS, вам СЛЕДУЕТ установить значение «upload_tmp_dir» в php.ini для некоторого каталога, где находится каталог ваших веб-сайтов, создать этот каталог, а затем установить для него те же разрешения, которые вы установили. для вашего каталога веб-сайтов. В противном случае, когда вы загружаете файл и он попадает в C:\WINDOWS\Temp, а затем вы перемещаете его в каталог вашего веб-сайта, его разрешения не будут установлены правильно. Это вызовет у вас проблемы, если вы затем захотите манипулировать этим файлом с помощью чего-то вроде утилиты конвертации ImageMagick.

Для тех, кто будет использовать инструменты inotify для запуска события, когда move_uploaded_file помещает файл в определенный каталог, имейте в виду, что move_uploaded_file вызовет событие создания, а не событие перемещения инструментов inotify.

nouncad на сайте mayetlite.com опубликовал функцию, которая загружала файл и переименовывала его, если он уже существовал, в имя_файла[n].ext

Это работало только для файлов с расширениями длиной ровно три буквы, поэтому я исправил это (и сделал несколько других улучшений, пока работал над этим).

// Использование: uploadfile($_FILE['file']['name'],'temp/',$_FILE['file']['tmp_name'])
функция uploadfile ( $origin , $dest, $tmp_name)
$origin = strtolower (базовое имя ($origin));
$fulldest = $dest . $ происхождение ;
$filename = $origin ;
for ( $i = 1 ; file_exists ( $fulldest ); $i ++)
$fileext = ( strpos ( $origin , '.' )=== false ? '' : '.' .substr(strrchr($origin, "."), 1));
$filename = substr($origin, 0, strlen($origin)-strlen($fileext)). '[' . $я. ']' . $fileext;
$fulldest = $dest . $ новое имя файла ;
>

if ( move_uploaded_file ( $tmp_name , $fulldest ))
return $filename ;
вернуть false ;
>
?>

Просто полезный комментарий. Если у вас установлен open_basedir, вы должны установить upload_tmp_dir где-то внутри open_basedir. В противном случае загрузка файла будет отклонена. move_uploaded_file может поддерживать open_basedir, но остальная часть процесса загрузки — нет.

Если вы имеете дело с файлами, загруженными через какой-либо внешний FTP-источник, и вам нужно переместить их в конечный пункт назначения, поиск на php.net слов «mv» или «move» не даст вам желаемого. Вам нужна функция rename().

(move_uploaded_file() не будет работать, так как не будут присутствовать переменные POST.)

move_uploaded_file (в моей настройке) всегда делает файлы 0600 ("rw- --- ---") и принадлежат пользователю, запустившему веб-сервер (владелец И группа).
Несмотря на то, что каталог имеет липкое бит установлен для групповых разрешений!
Я не смог найти никаких настроек, чтобы изменить это через php.ini или даже с помощью «umask()».

Я хочу, чтобы мой обычный пользователь на сервере мог "смолить cjf" каталог .. что не удалось бы с файлами, полностью принадлежащими пользователю веб-сервера-процесса;
"копировать (из, в) " функция подчиняется липкому биту!

Для nouncad на сайте mayetlite.com,

Для меня лучше всего будет проанализировать имя загруженного файла ($_FILES['uploadedfile']['name']) на основе наличия точек. Еще одна проблема: в имени файла могут быть точки. С этим достаточно просто справиться — просто взорвите() имя файла и надейтесь, что последний элемент в массиве, который он вам даст, — это расширение файла (вы всегда можете проверить его, если хотите). Затем просто соедините его в строку соответствующим образом, пройдясь по массиву (не забудьте добавить эти точки туда, где они были!), добавив гарантированную уникальную строку символов (или перечислите ее, как вы это делали, отслеживая через цикл) и, наконец, добавление расширения файла.

У вас могут быть другие механизмы для проверки расширения файла, такие как preg_match для всего имени, используя что-то вроде "/\\.(gif|jpg|jpeg|png|bmp)$/i" (подробнее можно, конечно, если хотите, добавьте) для наиболее распространенных типов изображений, которые можно найти в Интернете.

Чтобы слепо гарантировать, что загруженный файл будет иметь уникальное имя, это кажется фантастическим способом. Наслаждайтесь!

Похоже, что move_uploaded_file использует разрешения GROUP родительского каталога расположения файла tmp, тогда как простая «копия» использует группу процесса apache. Это может создать угрозу безопасности, если местоположение вашего файла tmp принадлежит пользователю root:wheel

точка только точка буря в gmail точка ком написал:
>
> В дополнение к проверке расширения файла. Простой способ
> получения расширения (независимо от размера):
>
> $efilename = Explosion('.', $filename);
> $ext = $ efilename[количество($efilename) - 1];
>

class UploadTool <
/**
* @var arr => $upload_info = infos sobre os arquivos enviados
*/
private $upload_info = array();
/**
* @param str => $input_name = имя для ввода
* @param str => $folder_to_move = имя для пасты, которую вы хотите сохранить
* @param arr => $mime_allowed = типы MIME разрешены без процесса загрузки
* @param bol => $return_json = se true retorna um objeto json
*/
public function manage_single_file (string $ input_name , string $folder_to_move , array $mime_allowed = [], bool $return_json = true ) <
$resultado = array();
$count_mime_allowed = количество ( $mime_allowed );
if( is_uploaded_file ( $_FILES [ $input_name ][ 'tmp_name' ])) <
$new_name_file = bin2hex ( random_bytes ( 64 )). '.' . pathinfo ( $_FILES [ $input_name ][ 'имя' ], PATHINFO_EXTENSION );
$this -> upload_info = array(
'name' => $new_name_file ,
'size' => $_FILES [ $input_name ][ 'size' ],
' mime' => finfo_file ( finfo_open ( FILEINFO_MIME_TYPE ), $_FILES [ $input_name ][ 'tmp_name' ]),
'extension' => pathinfo ( $_FILES [ $input_name ][ 'name' ], PATHINFO_EXTENSION ),
'check_mime' => true ,
'folder_to_move' => $folder_to_move ,
'error_code' => $_FILES [ $input_name ][ 'error' ],
);
if($count_mime_allowed > 0 && ! in_array ($this -> upload_info ['mime'], $mime_allowed, true)) < $this ->upload_info ['check_mime'] = false;>
if( $this -> upload_info [ 'код_ошибки' ] === 0 && $this -> upload_info [ 'check_mime' ] === true ) < move_uploaded_file ( $_FILES [ $input_name ][ 'tmp_name' ], $folder_to_move . $this ->upload_info [ 'name' ]);>
>
$resultado [ 'upload_info' ] = $this -> upload_info ;
если( $return_json )
если(!$return_json )
>
/**
* @param str => $input_name = nome do input
* @param str => $folder_to_move = name da pasta em que o arquivo será salvo
* @param arr => $mime_allowed = MIME-типы не разрешены для процесса загрузки
* @param bol => $return_json = se true retorna um objeto json
*/
общедоступная функция manage_multiple_file (string $input_name, string $folder_to_move, array $mime_allowed = [], bool $return_json = true) <
$resultado = array();
$count_mime_allowed = количество ( $mime_allowed );
$qtd_arquivos_enviados = count ( $_FILES [ $input_name ][ 'tmp_name' ]);
for( $i = 0 ; $i $qtd_arquivos_enviados ; $i ++) <
if( is_uploaded_file ( $_FILES [ $input_name ][ 'tmp_name' ][ $i ])) <
$new_name_file = bin2hex ( random_bytes ( 64 )). '.' . pathinfo ( $_FILES [ $input_name ][ 'имя' ][ $ i ], PATHINFO_EXTENSION );
$this -> upload_info [] = array(
'name' => $new_name_file ,
'size' => $_FILES [ $input_name ][ 'size' ][ $i ] ,
'mime' => finfo_file ( finfo_open ( FILEINFO_MIME_TYPE ), $_FILES [ $input_name ][ 'tmp_name' ][ $i ]),
'extension' => pathinfo ( $_FILES [ $input_name ][ 'имя' ][ $i ], PATHINFO_EXTENSION ),
'check_mime' => true ,
'folder_to_move' => $folder_to_move ,
'error_code' => $_FILES [ $ input_name ][ 'ошибка' ][ $i ],
);
if( $count_mime_allowed > 0 && ! in_array ( $this -> upload_info [ $i ][ 'mime' ], $mime_allowed , true )) < $this ->upload_info [ $i ][ 'check_mime' ] = false ;> ​​
if( $this -> upload_info [ $i ][ 'error_code' ] === 0 && $this -> upload_info [ $i ][ 'check_mime' ] === true ) < move_uploaded_file ( $_FILES [ $input_name ][ 'tmp_name' ][ $i ], $folder_to_move . $this ->upload_info [ $i ][ 'name' ]);>
>
>
$resultado [ 'upload_info' ] = $this -> upload_info ;
if( $return_json )
if(! $return_json )
>
>
if( $_FILES ) <(new UploadTool )->manage_multiple_file ('input_arquivos' , __DIR__ .'/pasta/' );>
?>

Очевидно, вышеприведенное предупреждение лучше было бы написать так: "Если конечный файл уже существует, он будет перезаписан независимо от разрешений для конечного файла".

Другими словами, move_uploaded_file() выполняется так, как если бы он был пользователем root, а не пользователем, под которым работает веб-сервер, или владельцем выполняемого скрипта.

Я получал код ошибки 1 (http://www.php.net/manual/en/features.file-upload.errors.php), указывающий на то, что размер файла превышает upload_max_filesize. Чтобы это исправить, запустите ( "upload_max_filesize", "100M" ); ?> (затем перезапустите apache), изменив второй аргумент на свой предел.

В течение нескольких лет я никак не мог понять, как эффективно загружать изображения (размером более 2 МБ), а затем создавать эскизы. Моя заметка ниже об общей загрузке файлов была ранним намеком на некоторые из системных ограничений по умолчанию, и я недавно обнаружил последнее ограничение, которое я предлагаю в качестве примера различных недостающих фрагментов информации для успешной загрузки изображений размером более 2 МБ, а затем создания эскизы. В этом конкретном примере предполагается, что загружается изображение пользователя, и из-за кэширования браузера требуется уникальный номер в конце, чтобы браузер загружал новое изображение для просмотра во время загрузки. Общая вызывающая программа, которую я использую, представляет собой приложение на основе Flex, которое вызывает этот php-файл для загрузки эскизов пользователей.

Секрет соуса:

<р>1. отрегулируйте размер памяти сервера, размер загружаемого файла и размер сообщения
2. преобразовать изображение в стандартный формат (в данном случае jpg) и масштабировать

Сервер можно настроить с помощью файла .htaccess или встроенного кода. В этом примере есть файл .htaccess с размером загружаемого файла и размером сообщения, а затем встроенный код для динамической системной памяти.

файл htaccess:
php_value post_max_size 16M
php_value upload_max_filesize 6M

// $img_base = базовая структура каталога для миниатюр
// $w_dst = максимальная ширина миниатюры
// $h_dst = максимальная высота миниатюры
// $n_img = new имя миниатюры
// $o_img = имя старой миниатюры
функция convertPic ($img_base, $w_dst, $h_dst, $n_img, $o_img)
< ini_set ('memory_limit', '100M' ); // обрабатывать большие изображения
отсоединить ( $img_base . $n_img ); // удалить старые изображения, если они есть
unlink ( $img_base . $o_img );
$new_img = $img_base . $n_img ;

$file_src = $img_base . "img.jpg" ; // временное безопасное хранилище изображений
unlink ( $file_src );
move_uploaded_file ( $_FILES [ 'Данные файла' ][ 'tmp_name' ], $file_src );

список($w_src, $h_src, $type) = getimagesize($file_src); // создаем новые размеры, сохраняя соотношение сторон
$ratio = $w_src / $h_src ;
если ($w_dst / $h_dst > $ratio) < $w_dst = пол ($h_dst * $ratio);>else < $h_dst = пол ($w_dst / $ratio);>

switch ( $type )
jpg
$img_src = imagecreatefromgif ( $file_src );
перерыв;
случай 2: // jpeg -> jpg
$img_src = imagecreatefromjpeg ( $file_src );
перерыв;
случай 3: // png -> jpg
$img_src = imagecreatefrompng ( $file_src );
перерыв;
>
$img_dst = imagecreatetruecolor ( $w_dst , $h_dst ); // повторная выборка

imagecopyresample ( $img_dst , $img_src , 0 , 0 , 0 , 0 , $w_dst , $h_dst , $w_src , $h_src );
imagejpeg ($img_dst, $new_img); // сохранить новое изображение

отключить ( $file_src ); // очистить хранилище изображений
imagedestroy ( $img_src );
imagedestroy ( $img_dst );
>

$p_id = (Целое число) $_POST [ uid ];
$ver = (Integer) $_POST [ver];
$delver = (Целое число) $_POST [ delver ];
convertPic("ваш/файл/структура/" , 150 , 150 , "u" . $p_id . "v" . $ver. ".jpg", "u" . $p_id . "v" . $ delver. ".jpg" );

Функция загрузки файлов в Google Forms позволяет получать файлы от респондентов прямо на ваш Google Диск. Вы можете добавить вопрос "Загрузить файл" в свою форму Google, чтобы получать задания в формате PDF от студентов, заявки на резюме, изображения портфолио от участников и т. д.

Когда респондент загружает файл через Google Forms, файл сохраняется в фиксированной папке на вашем Google Диске. Все файлы загружаются в одну и ту же папку, и, таким образом, глядя на файл на вашем Google Диске, трудно определить, какой респондент загрузил какой набор файлов.

Однако мы можем использовать скрипт Google Apps с триггерами форм Google, чтобы мгновенно упорядочивать файлы на Google Диске, как только они загружаются респондентом формы. Вы можете изменить папку назначения, в которой хранятся файлы, или создать собственные папки на основе ответа формы.

Организовать загрузку файлов на Google Диск

В следующем примере мы создадим родительскую папку на Google Диске для размещения всех загруженных файлов. Каждый ответ формы будет иметь свою собственную вложенную папку, и все файлы для этой конкретной записи формы будут находиться в одной папке.

Создать родительскую папку

Для начала перейдите на свой Google Диск и создайте новую папку (или используйте существующую папку). Откройте папку и возьмите идентификатор папки из адресной строки браузера, как показано на снимке экрана.

Добавить скрипт Google

Затем перейдите в форму Google, которая принимает загрузку файлов, и выберите «Редактор сценариев» в меню с тремя точками.

Совет. Сценарий также можно улучшить, чтобы создавать собственные имена папок на основе ответов пользователя в форме ответа.

Создать триггер OnFormSubmit

В редакторе сценариев выберите в раскрывающемся списке функций пункт "Инициализировать" и нажмите кнопку "Выполнить", чтобы создать триггер OnFormSubmit для текущей формы Google.

По сути, код Apps Script будет запускаться всякий раз, когда кто-то отправляет новую запись формы и загружает файлы в определенную папку на Google Диске.

Вот и все. Перейдите в свою форму Google и отправьте новую тестовую запись. Теперь вы должны увидеть все загруженные файлы, аккуратно организованные в пользовательской папке в родительской папке. Имя пользовательской папки — это уникальный идентификатор ответа, который Google Forms автоматически присваивает каждой отправке формы.

PS: вы можете комбинировать загрузку файлов в Google Forms с Document Studio для создания настраиваемых PDF-файлов (сертификатов, удостоверений личности сотрудников и т. д.) из загруженных изображений

MediaWiki поддерживает загрузку и интеграцию медиафайлов. На этой странице описаны технические аспекты этой функции. Общие сведения об использовании см. в разделе Руководство:Администрирование образов и Справка:Образы.

Начиная с MediaWiki версии 1.1 загрузка изначально отключена по умолчанию из соображений безопасности. Загрузку можно включить с помощью параметра конфигурации, хотя рекомендуется сначала проверить определенные предварительные условия.

Содержание

Предпосылки

Убедитесь, что загрузка включена в PHP

В php.ini необходимо установить следующее:

Если этот параметр не установлен, PHP-скрипты не могут использовать функции загрузки, и загрузка MediaWiki не будет разрешена.

Если задана директива open_basedir, она должна включать как целевую папку загрузки в вашей установке MediaWiki ("/images"), так и папку 'upload_tmp_dir' (системная папка по умолчанию, если она не задана). Добавление 'upload_tmp_dir' позволяет избежать сообщений типа "Не удалось найти файл"/var/tmp/php31aWnF" (где в этом примере 'upload_tmp_dir' — это '/var/tmp'). Читать подробнее о загрузке файлов PHP в разделе Основы загрузки файлов и, в частности, move_uploaded_file().

Формальным значением переменной является логическое выражение. PHP обрабатывает каждую строку, не распознанную как значение False, как истинную, поэтому часто используемое значение «on» дает тот же результат.

Проверить наличие пользователей Windows и IIS

Установите для %SystemRoot%\TEMP разрешения для гостевой учетной записи Интернета (IUSR _MachineName или IUSR для IIS 7+): чтение, запись и выполнение;

Проверить безопасность каталога

Каталог загрузки должен быть настроен таким образом, чтобы конечный пользователь не мог загружать и выполнять другие сценарии, которые затем могут использовать доступ к вашему веб-каталогу и повредить вашу вики или веб-сайт.

Установите для папки /images (или папки /uploads в предыдущих версиях) разрешение "755":

  • Пользователь может читать, писать и выполнять;
  • Группа может читать и выполнять;
  • Мир может читать и выполнять.

Только папки должны иметь права на выполнение. Файлы не должны иметь разрешения на выполнение. В Linux, чтобы удалить разрешения на выполнение для всех файлов в папке и добавить права на выполнение для папки и всех вложенных папок: chmod -x+X uploads_folder -R

При использовании SELinux обязательно соответствующим образом настройте списки управления доступом (см. там).

  • Ограничить список каталогов в папке с изображениями

Если вы не хотите, чтобы общедоступный пользователь отображал вашу папку с изображениями, можно настроить это в конфигурации Apache:

Проверьте файл .htaccess

Каталог images в папке установки MediaWiki содержит файл .htaccess с некоторыми настройками. Цель этого файла — сделать папку загрузки более безопасной, и если вы размещаете папку загрузки в другом месте, рекомендуется также скопировать файл .htaccess в новое место или применить эту конфигурацию непосредственно на сервере. Однако некоторые из этих конфигураций могут вызывать конфликты или ошибки в зависимости от конфигурации сервера.

Некоторые вещи, которые следует учитывать:

  • Если сервер не позволяет устанавливать или переопределять директивы в файлах .htaccess, доступ к любому файлу в этой папке может привести к общей ошибке "HTTP 500". В этом случае вы должны закомментировать строки и применить эти директивы непосредственно к файлам конфигурации сервера. Директивы, которые, скорее всего, вызывают проблемы, — это AddType, которая предотвращает обработку файлов HTML и PHP как HTML, и php_admin_flag, которая предотвращает анализ и выполнение файлов PHP на сервере как таковых.

Включение/отключение загрузки

В MediaWiki версии 1.5 и выше устанавливаемый атрибут находится в LocalSettings.php , а $wgEnableUploads задается следующим образом:

Чтобы отключить функцию загрузки, установите для атрибута значение false:

Использование центрального репозитория

InstantCommons — это функция, активируемая при изменении конфигурации, которая дает вам немедленный доступ к миллионам бесплатных (свободно лицензированных) файлов на Викискладе.

Разрешения на загрузку

По умолчанию все зарегистрированные пользователи могут загружать файлы. Чтобы ограничить это, вы должны изменить $wgGroupPermissions :

  • Чтобы запретить обычным пользователям загружать файлы:
    $wgGroupPermissions [ 'user' ][ 'upload' ] = false ;
  • Чтобы создать специальную группу с именем "uploadaccess" и разрешить членам этой группы загружать файлы:
    $wgGroupPermissions [ 'uploadaccess' ][ 'upload' ] = true ;
  • Чтобы разрешить "автоподтвержденным" (не новичкам) пользователям загружать файлы:
    $wgGroupPermissions [ 'autoconfirmed' ][ 'upload' ] = true ;

Право на замену существующих файлов обеспечивается дополнительным разрешением, называемым повторной загрузкой:

  • Чтобы обычные пользователи не могли переопределить существующие файлы:
    $wgGroupPermissions [ 'user' ][ 'reupload' ] = false ;
  • Чтобы разрешить "автоподтвержденным" (не новичкам) пользователям заменять существующие файлы:
    $wgGroupPermissions [ 'autoconfirmed' ][ 'reupload' ] = true ;

Если установлен ForeignFileRepo, право на локальную замену этих файлов обеспечивается специальным разрешением, называемым reupload-shared:

  • Чтобы обычные пользователи не могли перезаписывать файлы репозиториев локально:
    $wgGroupPermissions [ 'user' ][ 'reupload-shared' ] = false ;
  • Чтобы разрешить "автоподтвержденным" (не новичкам) пользователям заменять файлы файловых репозиториев локально:
    $wgGroupPermissions [ 'autoconfirmed' ][ 'reupload-shared' ] = true ;

Дополнительные сведения о правах пользователей см. в Руководстве: Права пользователя, а для получения дополнительной информации об ограничении доступа — в Руководстве: Предотвращение доступа.

Настройка типов файлов

Вы можете добавить $wgFileExtensions в LocalSettings.php, чтобы разрешить загрузку файлов других желаемых типов. Например, вы можете изменить строку $wgFileExtensions, чтобы она выглядела примерно так:

Однако некоторые расширения файлов занесены в черный список ($wgFileBlacklist ) и не могут быть загружены, даже если они добавлены в $wgFileExtensions. Чтобы загружать файлы с расширениями из черного списка, вы должны изменить черный список. Например, чтобы разрешить пользователям загружать исполняемые файлы:

Кроме того, $wgMimeTypeBlacklist запрещает определенные типы файлов на основе типа MIME; Файлы .zip, например, запрещены на основе типа MIME (MediaWiki версии 1.14 до 1.17).

чтобы разрешить загрузку большинства типов файлов. Однако занесенные в черный список типы файлов и типы MIME по-прежнему не будут разрешены.

Если вы получаете сообщение об ошибке "Файл поврежден или имеет неправильное расширение", убедитесь, что определение MIME-типа работает правильно.

Если вы решите разрешить файлы любого типа, убедитесь, что ваше обнаружение пантомимы работает, и подумайте о включении сканирования на вирусы для загружаемых файлов.

Чтобы включить расширение zip (проверено в MediaWiki v1.19.23), в файле LocalSettings.php необходимо указать следующее:

Войти

По умолчанию анонимные загрузки запрещены. Вы должны зарегистрироваться и войти в систему до того, как ссылка загрузить файл появится на панели инструментов.

Миниатюры

Информацию об автоматическом рендеринге/миниатюрах изображений см. в разделе Миниатюры изображений . Информацию о проблемах с миниатюрами см. в разделе Миниатюры изображений не работают и/или не отображаются.

Если файл не является визуальным (например, изображение или видео), вместо него используется значок файла. Они генерируются функцией iconThumb() в классе File в группе FileRepo. Значки, хранящиеся в " $wgStyleDirectory/common/images/icons/ " в формате " fileicon-$extension.jpg ".

Установить максимальный размер загружаемых файлов

Браузеры сообщают серверу размер загружаемого файла до того, как он фактически отправит файл.

Если загрузка слишком велика, она отклоняется целью (сервером), и загрузка завершается с ошибкой, в зависимости от того, на каком уровне было наложено ограничение:

По умолчанию код конфигурации в php.ini ограничивает размер загружаемых файлов до 2 мегабайт (и максимальный размер операции отправки до 8 мегабайт). Чтобы разрешить загрузку файлов большего размера, отредактируйте эти параметры в php.ini:

    , 8 мегабайт по умолчанию , 2 мегабайта по умолчанию

Для этого может потребоваться root-доступ к серверу. (Если вы используете общий хост, обратитесь к администратору сервера.)

Если вы увеличиваете максимальный размер загружаемого файла до значения, превышающего 100 МБ, вам необходимо добавить $wgMaxUploadSize с новым значением загружаемого файла в LocalSettings.php .

Расположение файла php.ini зависит от используемого дистрибутива. Инструкции по поиску файла php.ini, используемого вашим сервером, см. в Руководстве:Php.ini.

Несколько веб-сайтов, размещенных на сервере

ограничения веб-сервера

Ubuntu 16.04: перезапуск службы sudo apache2

(например, перезапустить sudo /etc/init.d/php5-fpm в Linux.)

предупреждение о загрузке слишком больших файлов

MediaWiki сама выдает предупреждение, если вы пытаетесь загрузить файлы большего размера, чем указано в параметре $wgUploadSizeWarning. Это не зависит от жесткого ограничения, налагаемого PHP.

временные ограничения на загрузку

Временные изменения ограничений на загрузку (например, при использовании нескольких вики на ферме) можно изменить, добавив строки:

в файл конфигурации MediaWiki LocalSettings.php для каждой вики. В этом примере ограничение PHP установлено на уровне 50 Мб. Обратите внимание, что эти настройки не будут переопределять максимальные настройки, установленные выше (поскольку основные файлы php.ini и apache2 php.ini устанавливают абсолютный максимум). Этот метод устанавливает максимумы, которые меньше абсолютного максимума.

Ограничение загрузки IIS7

По умолчанию IIS7 [4] в Windows 2008 позволяет загружать через веб-приложение только 30 МБ. Файлы большего размера будут возвращать ошибку 404 после загрузки. Если у вас есть эта проблема, вы можете решить ее, увеличив максимальный размер файла, добавив следующий код в ‎ system.webServer > в файле web.config:

С указанным выше параметром maxAllowedContentLength пользователи могут загружать файлы размером 50 000 000 байт (50 МБ). Этот параметр будет работать сразу, без перезапуска служб IIS. Файл web.config находится в корневом каталоге вашего веб-сайта.

Чтобы разрешить загрузку файлов размером до 2 ГБ:

добавьте следующие строки в LocalSettings.php:

Также измените следующие строки в php.ini:

В файле IIS web.config переопределите значение maxRequestLength. Например, следующая запись в файле web.config позволяет загружать файлы, размер которых меньше или равен 2 гигабайтам (ГБ):

В IIS 7 вам также необходимо настроить его, чтобы разрешить загрузку больших объемов данных. Это можно найти, нажав «Фильтрация запросов > Изменить параметры функции» в разделе IIS в середине окна. Установите в поле «Максимально допустимая длина содержимого (байты)» значение 2147482624. Если вы не видите «Фильтрация запросов» в разделе IIS, ее необходимо включить через Информационные службы Интернета > Службы World Wide Web > Безопасность в разделе «Включить функции Windows». вкл. или выкл.» на панели управления.

Если приведенный выше совет не позволяет загружать большие файлы, откройте командную строку и выполните эту команду:

%windir%\system32\inetsrv\appcmd set config -section:requestFiltering -requestLimits.maxAllowedContentLength: 2147482624

Разрешение загрузки Java JAR

По умолчанию MediaWiki сканирует все загрузки, которые выглядят как ZIP-архивы, и отклоняет все, содержащие файлы Java .class. Это мера безопасности, предотвращающая загрузку пользователями вредоносного Java-апплета. Только для закрытых сайтов: отключите эту проверку следующим образом:

Эту настройку можно использовать в качестве обходного пути, позволяющего принимать MIME-типы без разбора. Например, если вы попытаетесь загрузить файл .doc, созданный Word 2007, независимо от того, какой текстовый список вы предоставите и проверку MIME-типа вы активируете или запретите, вы получите сообщение:

Это поврежденный или нечитаемый ZIP-файл. Его нельзя должным образом проверить на предмет безопасности.

Файлы

.doc, сохраненные Word 2007 (и, возможно, более поздними версиями), содержат небольшой встроенный ZIP-архив, в котором хранятся метаданные, которые не могут быть представлены в двоичном формате .doc, используемом в более ранних версиях Word. Эти встроенные ZIP-данные сбивают с толку сканер архивов Java, в результате чего файл .doc отклоняется. Файлы в более новом формате .docx полностью являются допустимыми ZIP-архивами и могут быть успешно загружены без установки $wgAllowJavaUploads .

Загрузка непосредственно с URL-адреса ("Загрузка неопубликованного")

Если вы хотите разрешить пользователю напрямую загружать файлы с URL-адреса, а не из файла на локальном компьютере, установите $wgAllowCopyUploads = true .

По умолчанию загрузка по URL возможна только с использованием API (или расширений, таких как UploadWizard ). Чтобы эту опцию можно было использовать из Special:Upload, вам также нужно установить для $wgCopyUploadsFromSpecialUpload значение true. В форме загрузки вы увидите дополнительное поле для URL-адреса под обычным полем имени файла. Поле URL по умолчанию неактивно, но его можно активировать, активировав переключатель (флажок) слева от поля.

Для использования этой функции у пользователей должно быть право upload_by_url . Это право было предоставлено системным операторам по умолчанию до MediaWiki 1.20, но теперь его необходимо предоставить явно. Чтобы разрешить это обычным пользователям, установите

Имейте в виду, что разрешение загружать напрямую из произвольного места в Интернете упрощает загрузку случайных нежелательных материалов, и это может быть неправильно истолковано как приглашение загружать все, что люди могут найти в Интернете.

Для поддержки этой функции должна быть включена поддержка PHP cURL. Настройте свой PHP при установке, используя параметр --with-curl.

Если ваш сервер подключается к Интернету через прокси-сервер, необходимо соответствующим образом настроить $wgHTTPProxy. Либо вы указываете его напрямую, либо, если ваш сервер предоставляет переменную среды «http_proxy», см. ваш phpinfo(), тогда вы можете использовать следующий код в своем LocalSettings.php:

Массовая загрузка

Для загрузки нескольких файлов за один раз, а не каждого файла по отдельности, доступен ряд инструментов:

  • с помощью python: — скопировать несколько изображений в вики с указанного URL-адреса. - копирует изображения в другую вики

Загрузить каталог

Всякий раз, когда загружается изображение, создается несколько вещей:

  1. Статья в пространстве имен файлов с именем файла, например. Файл:MyPicture.jpg. Эта страница сохраняется и может редактироваться, как и любая другая страница.
  2. Сам файл хранится в папке файловой системы, настроенной в $wgUploadDirectory, или в одной из ее подпапок (см. ниже).
  3. Если доступно миниатюрное изображение, при необходимости будут создаваться миниатюрные версии файла (например, для использования на странице описания файла). Они хранятся в папке thumb папки изображения, в отдельной папке для каждого основного файла. .

Если $wgHashedUploadDirectory включен (по умолчанию), MediaWiki создает несколько подкаталогов в каталоге изображений.

Если для $wgHashedUploadDirectory задано значение true , загруженные файлы будут распределяться по подкаталогам $wgUploadDirectory на основе первых двух символов хэша md5 имени файла. (например, $IP/images/a/ab/foo.jpg) Создание таких подкаталогов выполняется автоматически. Это используется, чтобы избежать слишком большого количества файлов в одной папке, поскольку некоторые файловые системы плохо работают с большим количеством файлов в одной папке.

Если вы поддерживаете только небольшую вики с несколькими загруженными изображениями, вы можете отключить это, установив $wgHashedUploadDirectory = false , все изображения загружаются в сам $wgUploadDirectory. (например, $IP/images/foo.jpg)

Мультивики-сайты

  • Убедитесь, что вы изменили местоположение сайта в LocalSettings.php, например, с /var/lib/mediawiki туда, где находится ваша установка, и создал каталог изображений с возможностью записи (большинство остальных можно создать символическими ссылками).

Если этого не сделать, загрузка изображений таинственным образом прервется.

Настройка формы загрузки

Сообщение формы загрузки, предоставляемое при установке MediWiki по умолчанию (которое появляется, когда вы нажимаете ссылку «Загрузить файл» или переходите по ссылке Special:Upload), может вам не подойти.

В этом случае вы можете отредактировать содержимое MediaWiki:Uploadtext и добавить свой собственный текст. Если ваш вики-сайт многоязычный, не забудьте отредактировать локализованные версии, такие как MediaWiki:Uploadtext/de.

На странице MediaWiki:Лицензии вы можете настроить раскрывающийся список лицензий для загрузки вашего сайта. См. документацию по этой функции.

Учтите, что локализованные версии, такие как MediaWiki:Licenses/de, не будут работать по умолчанию. Чтобы включить их, вы должны настроить переменную $wgForceUIMsgAsContentMsg.

Редактируйте MediaWiki:Upload-default-description, чтобы добавить начальный текст в поле «Сводка» формы загрузки (например, на вашем вики-сайте есть универсальный шаблон для сводок загрузки, и вы хотите, чтобы все использовали этот шаблон).< /p>

Известные проблемы в Windows

Запуск MediaWiki на сервере Windows имеет некоторые ограничения на разрешенные имена файлов из-за ошибки PHP. PHP не может корректно обрабатывать имена файлов с не-ascii-символами, и MediaWiki откажется загружать файлы, содержащие такие символы, чтобы предотвратить неправильную загрузку (задача T3780), с сообщением Эта вики не поддерживает имена файлов со специальными символами. .

Начиная с MediaWiki 1.31, MediaWiki может обрабатывать имена файлов с символами, отличными от ASCII, если используется PHP 7.1 или более поздней версии.

Известные проблемы с именами баз данных, содержащими не буквенно-цифровые символы

". . Это вызвано внутренней проверкой действительного имени контейнера для серверной части файла, но оно создано с использованием $wgDBname .

Drive API позволяет загружать данные файла при создании или обновлении файла . Информацию о том, как создать файл только с метаданными, см. в разделе Создание файлов.

Существует три типа загрузки, которые вы можете выполнить:

Простая загрузка ( uploadType=media ). Используйте этот тип загрузки для быстрой передачи небольшого медиафайла (5 МБ или меньше) без предоставления метаданных. Чтобы выполнить простую загрузку, см. Выполнение простой загрузки.

Загрузка из нескольких частей ( uploadType=multipart ). Используйте этот тип загрузки, чтобы быстро передать небольшой файл (5 МБ или меньше) и метаданные, описывающие файл, в одном запросе. Чтобы выполнить многокомпонентную загрузку, см. Выполнение многокомпонентной загрузки.

Клиентские библиотеки Google API реализуют по крайней мере один из типов загрузки. Дополнительные сведения об использовании каждого из типов см. в документации по клиентской библиотеке.

Выполнить простую загрузку

Чтобы выполнить простую загрузку, используйте метод files.create с uploadType=media .

Ниже показано, как выполнить простую загрузку:

Питон

Node.js

Создайте запрос POST к URI /upload метода с параметром запроса uploadType=media :

Добавить данные файла в тело запроса.

  • Тип контента . Установите тип носителя MIME для загружаемого объекта.
  • Длина содержания . Установите количество байтов, которые вы загружаете. Этот заголовок не требуется, если вы используете кодирование передачи по частям.

При выполнении простой загрузки создаются основные метаданные, а некоторые атрибуты выводятся из файла, например тип MIME или модифицированное время. Вы можете использовать простую загрузку, если у вас небольшие файлы и метаданные файлов не важны.

Выполнить многокомпонентную загрузку

Составной запрос на загрузку позволяет отправлять метаданные вместе с загружаемыми данными. Используйте этот вариант, если отправляемые данные достаточно малы для повторной загрузки целиком в случае сбоя соединения.

Чтобы выполнить многокомпонентную загрузку, используйте метод files.create с uploadType=multipart .

Ниже показано, как выполнить многокомпонентную загрузку:

Питон

Node.js

Создайте запрос POST к URI /upload метода с параметром запроса uploadType=multipart :

Создайте текст запроса. Отформатируйте тело в соответствии с типом содержимого multipart/related [RFC 2387], которое состоит из двух частей:

  • Метаданные. Метаданные должны быть первыми, и заголовок Content-Type должен иметь значение application/json; кодировка=UTF-8 . Добавьте метаданные файла в формате JSON.
  • Медиа. Носитель должен быть вторым и должен иметь заголовок Content-Type любого типа MIME. Добавьте данные файла в мультимедийную часть.

Идентифицируйте каждую часть граничной строкой, которой предшествуют два дефиса. Кроме того, добавьте два дефиса после последней строки границы.

  • Тип контента . Установите значение multipart/related и включите граничную строку, которую вы используете для идентификации различных частей запроса. Например: Content-Type: multipart/related; граница=foo_bar_baz
  • Длина содержания . Укажите общее количество байтов в теле запроса.

Отправить запрос.

При создании файлов файлы должны указывать расширение файла в поле имени файла. Например, при создании файла фотографии в формате JPEG вы можете указать что-то вроде «имя»: «photo.jpg» в метаданных. Последующие вызовы files.get возвращают доступное только для чтения свойство fileExtension, содержащее расширение, первоначально указанное в поле имени.

Выполнить возобновляемую загрузку

Возобновляемая загрузка позволяет возобновить операцию загрузки после того, как сбой связи прервал поток данных. Поскольку вам не нужно перезапускать загрузку больших файлов с самого начала, возобновляемая загрузка также может сократить использование полосы пропускания в случае сбоя сети.

Возобновляемая загрузка полезна, когда размеры ваших файлов могут сильно различаться или когда существует фиксированное ограничение по времени для запросов (фоновые задачи мобильной ОС и определенные запросы AppEngine). Вы также можете использовать возобновляемую загрузку в ситуациях, когда хотите отобразить индикатор выполнения загрузки.

Возобновляемая загрузка состоит из трех высокоуровневых шагов:

  1. Отправьте первоначальный запрос и получите URI возобновляемого сеанса.
  2. Загружайте данные и следите за состоянием загрузки.
  3. (необязательно) Если загрузка прервалась, возобновите загрузку.

Отправить первоначальный запрос

Чтобы инициировать возобновляемую загрузку, используйте метод files.create с uploadType=resumable .

Создайте запрос POST к URI /upload метода с параметром запроса uploadType=resumable :

Следует сохранить URI возобновляемого сеанса, чтобы можно было загружать данные файла и запрашивать статус загрузки. Срок действия URI возобновляемого сеанса истекает через неделю.

Если у вас есть метаданные для файла, добавьте метаданные в тело запроса в формате JSON. В противном случае оставьте тело запроса пустым.

  • X-Upload-Content-Type . Необязательный. Установите тип MIME файловых данных, которые передаются в последующих запросах. Если MIME-тип данных не указан в метаданных или в этом заголовке, объект обслуживается как application/octet-stream.
  • X-длина-загрузки-контента . Необязательный. Задайте количество байтов данных файла, которые передаются в последующих запросах.
  • Тип контента . Требуется, если у вас есть метаданные для файла. Установите приложение/json; кодировка=UTF-8 .
  • Длина содержания . Требуется, если вы не используете кодирование передачи по частям. Задайте количество байтов в теле исходного запроса.

Скопируйте и сохраните URL-адрес возобновляемого сеанса.

Загрузить контент

Есть два способа загрузить файл с возобновляемым сеансом:

    Загружайте контент одним запросом. Используйте этот подход, когда файл можно загрузить одним запросом, если нет фиксированного ограничения по времени для любого отдельного запроса или вам не нужно отображать индикатор выполнения загрузки. Этот подход обычно лучше, потому что он требует меньше запросов и приводит к более высокой производительности.

Загружайте содержимое несколькими фрагментами. Используйте этот подход, если вам нужно уменьшить объем данных, передаваемых в любом отдельном запросе. Вам может потребоваться уменьшить количество передаваемых данных, если для отдельных запросов установлено фиксированное ограничение по времени, как это может быть в случае с определенными классами запросов Google App Engine. Этот подход также удобен, если вам нужно предоставить настраиваемый индикатор, показывающий ход загрузки.

Создайте запрос PUT для URI возобновляемого сеанса.

Добавьте данные чанка в тело запроса. Создавайте фрагменты размером, кратным 256 КБ (256 x 1024 байт), за исключением последнего фрагмента, который завершает загрузку. Размер блока должен быть как можно больше, чтобы загрузка была эффективной.

  • Длина содержания . Задайте количество байтов в текущем фрагменте.
  • Диапазон контента . Установите, чтобы показать, какие байты в файле, который вы загружаете. Например, Content-Range: bytes 0-524287/2000000 показывает, что вы загружаете первые 524 288 байт (256 x 1024 x 2) в файле размером 2 000 000 байт.

Отправьте запрос и обработайте ответ. Если запрос на загрузку прерван или вы получили ответ 5xx, выполните процедуру, описанную в разделе Возобновление прерванной загрузки.

Повторите шаги с 1 по 4 для каждого фрагмента, оставшегося в файле. Используйте заголовок Range в ответе, чтобы определить, с чего начать следующий фрагмент. Не думайте, что сервер получил все байты, отправленные в предыдущем запросе.

Когда загрузка всего файла будет завершена, вы получите ответ 200 OK или 201 Created вместе со всеми метаданными, связанными с ресурсом.

Возобновить прерванную загрузку

Если запрос на загрузку прерывается до получения ответа или если вы получаете ответ 503 Service Unreachable, вам необходимо возобновить прерванную загрузку.

Чтобы запросить статус загрузки, создайте пустой запрос PUT на URI возобновляемого сеанса.

Добавьте заголовок Content-Range, чтобы указать, что текущая позиция в файле неизвестна. Например, установите для параметра Content-Range значение */2000000, если общая длина файла составляет 2 000 000 байт. Если вы не знаете полный размер файла, установите Content-Range в */* .

Отправить запрос.

Обработать ответ:

  • Ответ 200 OK или 201 Created означает, что загрузка завершена и дальнейших действий не требуется.
  • Ответ 308 Resume Incomplete означает, что вам нужно продолжить загрузку файла.
  • Ответ 404 Not Found указывает на то, что срок действия сеанса загрузки истек, и загрузку необходимо перезапустить с самого начала.

Если вы получили ответ 308 Resume Incomplete, обработайте заголовок Range ответа, чтобы определить, какие байты были получены сервером. Если в ответе нет заголовка Range, байты не были получены. Например, заголовок диапазона байтов=0-42 указывает, что первые 43 байта файла были получены и что следующий фрагмент для загрузки будет начинаться с 43-го байта.

Теперь, когда вы знаете, где возобновить загрузку, продолжите загрузку файла, начиная со следующего байта. Включите заголовок Content-Range, чтобы указать, какую часть файла вы отправляете. Например, Content-Range: bytes 43-1999999/2000000 указывает, что вы отправляете байты с 43 по 1 999 999.

Обработка ошибок загрузки мультимедиа

При загрузке медиафайлов следуйте этим рекомендациям по устранению ошибок:

  • В случае ошибок 5xx возобновите или повторите загрузку, которая не удалась из-за разрыва соединения. Дополнительные сведения об обработке ошибок 5xx см. в разделе Устранение ошибок
  • .
  • Если ошибка ограничения скорости 403, повторите попытку загрузки. Дополнительную информацию об обработке ошибок ограничения скорости 403 см. в разделе Устранение ошибки 403: превышен предел скорости
  • При любых ошибках 4xx (включая 403) во время возобновляемой загрузки перезапустите загрузку. Эти ошибки указывают на то, что срок действия сеанса загрузки истек и его необходимо перезапустить, запросив новый URI сеанса. Сеансы загрузки также истекают через 1 неделю бездействия.

Импорт в типы документов Google

Когда вы создаете файл на Google Диске, вы можете преобразовать его в тип файла Google Workspace, например в документ или таблицу Google. Например, вы хотите преобразовать документ из своего любимого текстового процессора в документ Google, чтобы воспользоваться преимуществами его функций.

Чтобы преобразовать файл в определенный тип файла Google Workspace, укажите mimeType Google Workspace при создании файла.

Примечание. Если вы используете старую версию Drive API версии 2, включите параметры запроса преобразования и укажите mimeType Google Workspace при создании файла.

Ниже показано, как преобразовать файл CSV в лист Google Workspace:

Питон

Node.js

< tr>

Когда вы загружаете и конвертируете мультимедиа во время запроса на обновление в Google Doc, Sheet или Slide, все содержимое документа заменяется.

При преобразовании изображения в документ Google Диск использует оптическое распознавание символов (OCR) для преобразования изображения в текст. Вы можете улучшить качество алгоритма OCR, указав применимый код языка BCP 47 в параметре ocrLanguage. Извлеченный текст отображается в документе Google Docs вместе со встроенным изображением.

Использовать предварительно сгенерированный идентификатор для загрузки файлов

Drive API позволяет получить список предварительно созданных идентификаторов файлов, используемых для загрузки и создания ресурсов. Запросы на загрузку и создание файлов могут использовать эти предварительно сгенерированные идентификаторы. Задайте поле id в метаданных файла.

Чтобы создать предварительно сгенерированные идентификаторы, вызовите file.generateIds с количеством создаваемых идентификаторов.

Определить индексируемый текст для неизвестных типов файлов

Пользователи могут использовать интерфейс Диска для поиска содержимого документа. Вы также можете использовать file.list и поле fullText для поиска контента из вашего приложения. Дополнительные сведения о поиске файлов см. в разделе Поиск файлов и папок

Чтобы разрешить поиск контента, Диск автоматически индексирует содержимое документа, когда распознает тип файла.К распознаваемым типам файлов относятся текстовые документы, PDF-файлы, изображения с текстом и другие распространенные типы. Если ваше приложение сохраняет файлы, которые Диск не распознает, вы должны включить текст в поле contentHints.indexableText файла. При указании indexableText имейте в виду:

  • Убедитесь, что вы фиксируете ключевые термины и понятия, которые, как вы ожидаете, будет искать пользователь.
  • Ограничение размера для contentHints.indexableText – 128 КБ.
  • Вам не нужно упорядочивать текст в порядке важности; индексатор определяет важность.
  • Индексируемый текст должен обновляться вашим приложением при каждом сохранении.
  • Убедитесь, что любой indexableText действительно присутствует в содержимом или метаданных файла. Не пытайтесь заставить файл появляться в результатах поиска, включая термины, которых нет в содержимом или метаданных. Пользователям не нравится выполнять поиск, который приводит к файлам с нерелевантным содержанием.

Если не указано иное, содержимое этой страницы предоставляется по лицензии Creative Commons Attribution 4.0, а образцы кода — по лицензии Apache 2.0. Подробнее см. в Правилах сайта Google Developers. Java является зарегистрированным товарным знаком Oracle и/или ее дочерних компаний.

Читайте также:

ОтКому
Microsoft Word, OpenDocument Text, HTML, RTF, обычный текстДокументы Google
Microsoft Excel, электронные таблицы OpenDocument, CSV, TSV, обычный текстТаблицы Google
Microsoft Powerpoint, презентация OpenDocumentПрезентации Google
JPEG, PNG, GIF, BMP, PDFGoogle Документы (встраивает изображение в документ)
обычный текст (специальный тип MIME), JSONСкрипт Google Apps