API:Upload/ru

POST-запрос для загрузки файла.

Существует три способа загрузки файлов через API:


 * 1) Прямая загрузка локального файла
 * 2) Загрузка копии файла с URL-адреса
 * 3) Загрузка локального файла кусками

Все эти методы требуют учетной записи с правом.



Upload warnings
Note that an upload may fail due to a number of warning conditions. This can be overridden by setting. Some notable warnings include:


 * exists: A file with the given name already exists. If this warning is ignored, the uploaded file will replace the existing file.
 * no-change: A file with the given name already exists and is exactly the same as the uploaded file.
 * duplicate-version: A file with the given name already exists and and old version of that file is exactly the same as the uploaded file.
 * was-deleted: a file with the given name used to exist but has been deleted.
 * duplicate: The uploaded file exists under a different (or the same) name. Uploading a duplicate may be undesirable.
 * duplicate-archive: The uploaded used to exist under a different (or the same) name but has been deleted. This may indicate that the file is inappropriate and should not be uploaded.
 * badfilename: The file name supplied is not acceptable on this wiki, for instance because it contains forbidden characters

Пример
Выполнение любого POST-запроса является многоэтапным процессом:

 Войдите, используя один из методов, описанных в . Получите :

 Отправьте POST-запрос с токеном CSRF, чтобы загрузить файл. 



Пример 1: Загрузка локального файла напрямую
При прямой загрузке файлов запрос должен использовать  в качестве Content-Type или enctype,   не будет работать.



Ответ


Пример кода


Пример 2: Загрузка файла с URL-адреса
Для этого требуется  в локальных настройках вики и учётная запись с пользовательским правом.



Ответ


Пример кода


Пример 3: Загрузка файла кусками
Поскольку загрузка огромного файла в одном HTTP POST может быть ненадёжной, API также поддерживает режим фрагментированной загрузки, в котором вы делаете несколько запросов с частями файла. Это доступно в MediaWiki версии 1.20 и выше, хотя до версии 1.25 SVG-файлы не могли быть загружены через фрагментированную загрузку. Это используется в браузерах, поддерживающих FileAPI, загружая файлы кусками по 1 мегабайту, но вы можете выбрать свой собственный размер. Это работает в сочетании с режимом хранения (stash mode), чтобы собрать файл по частям, а затем зафиксировать его в конце.

<span id="Step_1:_Pass_content_for_the_first_chunk">

Шаг 1: Передайте содержимое первого куска


Для всех кусков, кроме последнего, вы получите это:

<span id="Step_2:_Pass_filekey_parameter_for_second_and_further_chunks">

Шаг 2: Передайте параметр filekey для второго и последующих кусков
До тех пор пока получаете параметр  из предыдущего ответа продолжения:



Для последнего куска вы получите это:

<span id="Step_3:_Final_upload_using_the_filekey_to_commit_the_upload_out_of_the_stash_area">

Шаг 3: Окончательная загрузка с использованием filekey, для фиксации загрузки из области тайника


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

<span id="Sample_code">

Пример кода
<span id="Possible_errors">

Возможные ошибки
See also the section on #Upload warnings above.

<span id="Parameter_history">

История параметров

 * v1.21: Введены
 * v1.19: Введены
 * v1.18: Введены
 * v1.17: Введены,  ,  ,
 * v1.18: Устарели
 * v1.17: Устарели

<span id="Additional_notes">

Дополнительная информация

 * Чтобы проверить состояние текущей загрузки в тайник или ход публикации файла из тайника, отправьте POST-запрос:


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

User-Agent: <YOUR USER-AGENT> Content-Type: multipart/form-data; boundary=--24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Host: commons.wikimedia.org Cookie: Connection: Keep-Alive

--24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Content-Disposition: form-data; name="filename" Content-Length: 20

UploadTest356456.png --24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Content-Disposition: form-data; name="offset" Content-Length: 1

0 --24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Content-Disposition: form-data; name="format" Content-Length: 4

json --24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Content-Disposition: form-data; name="ignorewarnings" Content-Length: 1

1 --24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Content-Disposition: form-data; name="filesize" Content-Length: 3

971 --24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Content-Disposition: form-data; name="token" Content-Length: 42

<YOUR_CSRF_TOKEN_HERE> --24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Content-Disposition: form-data; name="stash" Content-Length: 1

1 --24b7c3bb-fb4d-45c3-937c-11c2e0c2525b Content-Disposition: form-data; name="chunk"; filename="1.png" Content-Type: application/octet-stream Content-Length: 971

<RAW_BYTES_FROM_FILE_HERE> --24b7c3bb-fb4d-45c3-937c-11c2e0c2525b--

<span id="See_also">

См. также

 * - Позволяет участнику войти в систему
 * - Позволяет участнику импортировать страницу
 * - Upload limits according to user groups