Как загружать две или несколько фотографий одновременно в Инстаграм в одной публикации? Загрузка файлов и папок на диск Не загружается файл на сервер.

Доброго времени суток, дорогие друзья, читатели, почитатели, посетители и всякие прочие личности. Думаю, что многие из Вас уже по достоинству оценили возможности и хранения данных в них. Кто-то пользуется , кто-то Dropbox , кто-то Яндекс.Диском , а некоторые создают и используют -сервера, свои и чужие. Как говорится, у всех свои вкусы и предпочтения.

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

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

  • Сделать скриншоты и залить изображения на: Imageshack , TinyPic , Imgur , Flikr , Photobucket , TwitPic , TwitSnaps , YFrog , MediaWiki
  • Загрузить файлы на: Dropbox , Box , Minus , FTP , RapidShare , SendSpace , Custom uploader
  • ..А текст на: Pastebin , Paste2 , Slexy .

Список внушителен, не так ли? :) К тому же, помимо списка, плюс в том, что делать это можно из одной вышеупомянутой программы и делать быстро, в меру удобно и не бегая десятки раз по сайтам и/или устанавливая кучи дополнительного альтернативного софта под каждый из сервисов файлообменников (бывает и такое).

Впрочем, в сторону лирику и.. поехали.

Установка и использование ZUploader для загрузки файлов на обменники

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

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

Установка предельно проста и на ней останавливаться не будем, благо на момент написания статьи установка состояла из одних нажатий кнопки« Next » (даже, как ни странно, без предложений установить дополнительные и ненужные Вам программы). Впрочем, на 5 шаге установки Вы можете поставить галочку « Create a desktop icon » , что добавит иконку на рабочий стол после установки.

После установки, при первом запуске, может появится такая ошибка:

Просьба не паниковать и пока пропустить её (если, конечно она появилась), собственно, нажав единственную кнопку "ОК ".

После установки и запуска, Вы увидите примерно следующее главное окно программы (комментарии различных пунктов меню приведены на скриншоте):

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

На вкладке «General » можно поставить галочки на пунктах: « Show Zuploader tray icon » (показывать иконку программы в трее, т.е возле часов), « Start Zuploader with Windows » (запускать программу при старте системы) и « Show " Upload using Zuploader " in Shell context menu » (добавить программу в контекстное меню Windows , т.е имеется ввиду добавление пункта в меню, что вылезает по щелчку правой кнопкой мыши на файл).

На вкладке « Hotkeys » Вы можете задать комбинации клавиш для снятия скриншотов (те самые, что из-за возможной ошибки выше могли по умолчанию не записаться сами):

На вкладке « Image» Вы можете задать формат изображения для скриншотов.

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

Если Вы не очень поняли, то "Image" - это изображения, т.е в подпукнкте Вы выбираете куда (на какой сервис) загружать оные; "Text" - это текст, т.е в подпункте Вы выбираете куда будет загружаться текст; "File " - это файл, т.е в подпункте Вы выбираете куда будет загружаться оный и "URL shortener " - это выбор сервиса, что будет сокращать Ваши ссылки.

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

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

Кстати тут можно поставить галочку «Don’t show this window », дабы программа при каждой загрузке не переспрашивала о Вашем желании загрузить файл. После cего в общем-то жмём «ОК » и файл успешно грузиться в интернет, а далее Вы можете кликнуть правой кнопкой мыши на файле и выбрать «Open URL » - для открытия файла в браузере, либо же «Copy URL » - для копирования ссылки на файл (и для дальнейшей передачи ссылки своим знакомым или публикации на сайт)

Заливать файлы можно как из главного экрана программы кнопкой « File Upload » так и из контекстного меню Windows (правая кнопка мышки -> пункт «Отправить », если конечно Вы использовали пункт « Show " Upload using Zuploader " in Shell context menu » в настройках). Программа, как и упоминалось выше, имеет встроенные инструменты для снятия скриншотов с экрана, а для сего нажмите в главном окне программы кнопку «Capture », после чего выберите нужную Вам опцию (думаю, что перебирая оные, Вы сами разберетесь, что к чему) и сделайте скриншот, а после загрузки файла программа любезно скопирует ссылку на него в буфер обмена.

Послесловие

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

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

PS : За существование данной статьи спасибо члену команды под ником "Оптимус".

Для того чтобы можно было загружать на сервер один или несколько файлов, в форме применяется специальное поле. В браузерах Firefox, IE и Opera такой элемент отображается как текстовое поле, рядом с которым располагается кнопка с надписью «Обзор...» (рис. 1). В Safari и Chrome доступна только кнопка «Выберите файл» (рис. 2).

Рис. 1. Вид поля для загрузки файла в Firefox

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

Синтаксис поля для отправки файла следующий.

Атрибуты перечислены в табл. 1.

Прежде, чем использовать данное поле, в форме необходимо сделать следующее:

  1. задать метод отправки данных POST (method="post" );
  2. установить у атрибута enctype значение multipart/form-data .

Форма для загрузки файла продемонстрирована в примере 1.

Пример 1. Создание поля для отправки файла

HTML5 IE Cr Op Sa Fx

Отправка файла на сервер

Хотя можно установить ширину поля через атрибут size , в действительности ширина никак не влияет на результат работы формы. В браузерах Safari и Chrome этот атрибут вообще никакого воздействия не оказывает.

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

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

  • audio/* - выбор музыкальных файлов любого типа;
  • image/* - графические файлы;
  • video/* - видеофайлы.

В табл. 2 показаны некоторые допустимые значения атрибута accept .

Использование дополнительных атрибутов показано в примере 2.

HTML5 IE 10+ Cr Op Sa Fx

Загрузите ваши фотографии на сервер

Не все браузеры поддерживают новые атрибуты. IE полностью игнорирует multiple и accept , Safari не поддерживает accept , а Firefox не работает с MIME-типом, только с ключевыми словами. Поэтому в примере выше специально для Firefox установлено значение image/*,image/jpeg . Также учтите странную ошибку в Опере, она не допускает пробелы после запятой внутри accept .

Результат примера показан на рис. 3. Обратите внимание, что из-за наличия multiple несколько изменился вид поля.

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

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

  1. Загрузка с помощью программы Яндекс.Диск
  2. Скачивание публичных файлов и папок
  3. Проблемы с загрузкой

Загрузку тех файлов, которые еще не успели загрузиться до конца, можно отменить. Для этого нажмите кнопку Отменить загрузки .

Подробнее о работе программы Яндекс.Диск читайте в разделах Яндекс.Диск 3.0 для Windows , Яндекс.Диск 3.0 для macOS или Консольный клиент для Linux .

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

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

Копирование публичных файлов и папок на свой Диск

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

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

Не загружается файл на сервер

Если в процессе загрузки файла вы получаете сообщение об ошибке, убедитесь, что размер файла не превышает 10 ГБ - максимально возможный размер для отправки через веб-интерфейс. Для загрузки файлов большего размера используйте или подключение по протоколу Доступ к Диску через WebDAV .

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

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

Загрузку нескольких файлов можно реализовать используя, например, различные значения name для тега input .

Также можно одновременно загружать несколько файлов и автоматически получить их в виде массива. Для реализации такой возможности используйте тот же синтаксис массива в HTML-форме, что и для множественных полей select и checkbox:

Файлы:


В случае, если такая форма была отправлена, массивы $_FILES["userfile"] , $_FILES["userfile"]["name"] , и $_FILES["userfile"]["size"] будут инициализированы. Если включена конфигурационная директива register_globals , также будут инициализированы сопутствующие глобальные переменные. Каждая из таких переменных будет представлять собой численно-индексированный массив соответствующих значений для отправленных файлов.

Например, предположим, что были загружены файлы /home/test/review.html и /home/test/xwp.out . В таком случае переменная $_FILES["userfile"]["name"] будет установлена значением review.html , а переменная $_FILES["userfile"]["name"] - значением xwp.out . Аналогично, переменная $_FILES["userfile"]["size"] будет содержать размер файла review.html и так далее.

Переменные $_FILES["userfile"]["name"] , $_FILES["userfile"]["tmp_name"] , $_FILES["userfile"]["size"] и $_FILES["userfile"]["type"] также будут инициализированы.

Внимание

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

14 years ago

When uploading multiple files, the $_FILES variable is created in the form:

Array
=> Array
=> foo.txt
=> bar.txt
)

=> Array
=> text/plain
=> text/plain
)

=> Array
=> /tmp/phpYzdqkD
=> /tmp/phpeEwEWG
)

=> Array
=> 0
=> 0
)

=> Array
=> 123
=> 456
)

I found it made for a little cleaner code if I had the uploaded files array in the form

Array
=> Array
=> foo.txt
=> text/plain
=> /tmp/phpYzdqkD
=> 0
=> 123
)

=> Array
=> bar.txt
=> text/plain
=> /tmp/phpeEwEWG
=> 0
=> 456
)

I wrote a quick function that would convert the $_FILES array to the cleaner (IMHO) array.

Function reArrayFiles (& $file_post ) {

$file_ary = array();
$file_count = count ($file_post [ "name" ]);
$file_keys = array_keys ($file_post );

For ($i = 0 ; $i < $file_count ; $i ++) {
foreach ($file_keys as $key ) {
$file_ary [ $i ][ $key ] = $file_post [ $key ][ $i ];
}
}

Return $file_ary ;
}

?>

Now I can do the following:

If ($_FILES [ "upload" ]) {
$file_ary = reArrayFiles ($_FILES [ "ufile" ]);

Foreach ($file_ary as $file ) {
print "File Name: " . $file [ "name" ];
print "File Type: " . $file [ "type" ];
print "File Size: " . $file [ "size" ];
}
}

?>

5 years ago

This is also needed for elements.

So, if you have an input element like this:

This should be written as

else you"ll only be able to get one of the files.

9 years ago

Here is a function to fix the indices of a multi-dimensional for easier parsing when dealing with file uploads. It takes a single $_FILES field array as a parameter and separates each individual uploaded file by numeric key. This allows for iterating like:

fixFilesArray ($_FILES [ "array_of_files" ]);
foreach ($_FILES [ "array_of_files" ] as $position => $file ) {
// should output array with indices name, type, tmp_name, error, size
var_dump ($file );
}
?>

Here"s the code:

/**
* Fixes the odd indexing of multiple file uploads from the format:
*
* $_FILES["field"]["key"]["index"]
*
* To the more standard and appropriate:
*
* $_FILES["field"]["index"]["key"]
*
* @param array $files
* @author Corey Ballou
* @link http://www.jqueryin.com
*/
function fixFilesArray (& $files )
{
$names = array("name" => 1 , "type" => 1 , "tmp_name" => 1 , "error" => 1 , "size" => 1 );

Foreach ($files as $key => $part ) {
// only deal with valid keys and multiple files
$key = (string) $key ;
if (isset($names [ $key ]) && is_array ($part )) {
foreach ($part as $position => $value ) {
$files [ $position ][ $key ] = $value ;
}
// remove old key reference
unset($files [ $key ]);
}
}
}
?>

3 years ago

This is a very simple example:





Document







echo "

"
;
$img = $_FILES [ "img" ];

if(!empty($img ))
{
$img_desc = reArrayFiles ($img );
print_r ($img_desc );

Foreach($img_desc as $val )
{
$newname = date ("YmdHis" , time ()). mt_rand (). ".jpg" ;
move_uploaded_file ($val [ "tmp_name" ], "./uploads/" . $newname );
}
}

function reArrayFiles ($file )
{
$file_ary = array();
$file_count = count ($file [ "name" ]);
$file_key = array_keys ($file );

For($i = 0 ; $i < $file_count ; $i ++)
{
foreach($file_key as $val )
{
$file_ary [ $i ][ $val ] = $file [ $val ][ $i ];
}
}
return $file_ary ;
}

2 years ago

Once I had to do a maintenance in a huge ERP that had several multiple upload inputs inside an array. Just like this:







The $_FILES array is created like this:

Array
=> Array
=> Array
=> teste.c
=> teste
)

=> Array
=> text/x-csrc
=> application/octet-stream
)

=> Array
=> /opt/lampp/temp/phpuf3KNj
=> /opt/lampp/temp/php0yPZap
)

=> Array
=> 0
=> 0
)

=> Array
=> 1960
=> 8661
)

=> Array
=> Array
=> jefrey.html
=> notas.txt
)

=> Array
=> text/html
=> text/plain
)

=> Array
=> /opt/lampp/temp/php87nfyu
=> /opt/lampp/temp/phpUBlvVz
)

=> Array
=> 0
=> 0
)

=> Array
=> 583
=> 191
)

I"ve managed to re-arrange this array like this:

Array
=> Array
=> Array
=> teste.c
=> text/x-csrc
=> /opt/lampp/temp/phpuf3KNj
=> 0
=> 1960
)

=> Array
=> teste
=> application/octet-stream
=> /opt/lampp/temp/php0yPZap
=> 0
=> 8661
)

=> Array
=> Array
=> jefrey.html
=> text/html
=> /opt/lampp/temp/php87nfyu
=> 0
=> 583
)

=> Array
=> notas.txt
=> text/plain
=> /opt/lampp/temp/phpUBlvVz
=> 0
=> 191
)

Here"s my snippet:
function reArrayFilesMultiple (& $files ) {
$uploads = array();
foreach($_FILES as $key0 => $FILES ) {
foreach($FILES as $key => $value ) {
foreach($value as $key2 => $value2 ) {
$uploads [ $key0 ][ $key2 ][ $key ] = $value2 ;
}
}
}
$files = $uploads ;
return $uploads ; // prevent misuse issue
}
?>

3 years ago

This is just a modification of the code which is the top note by "phpuser" here. His/her version requires that the $file_post array passed in to the function was created by a form submitted with the multiple attribute set. With multiple set in the html input tag, $_FILES["fileInputName"]["name"] is an array no matter if only one file is sent or multiple. But when is used without the multiple attribute then $_FILES["fileInputName"]["name"] is not an array, it contains the the string with the filename. To use this neat function with or without multiple set and to get back an array which you can "foreach" over in either case, use this modification:

function reArrayFiles(&$file_post)
{
$file_ary = array();
$multiple = is_array($file_post["name"]);

$file_count = $multiple ? count($file_post["name"]) : 1;
$file_keys = array_keys($file_post);

For ($i=0; $i<$file_count; $i++)
{
foreach ($file_keys as $key)
{
$file_ary[$i][$key] = $multiple ? $file_post[$key][$i] : $file_post[$key];
}
}

Return $file_ary;
}

3 years ago

Recursive solution for complex situations (supports any nested arrays including indexed arrays)

function getFixedFilesArray() {
$walker = function ($arr, $fileInfokey, callable $walker) {
$ret = array();
foreach ($arr as $k => $v) {
if (is_array($v)) {
$ret[$k] = $walker($v, $fileInfokey, $walker);
} else {
$ret[$k][$fileInfokey] = $v;
}
}
return $ret;
};

$files = array();
foreach ($_FILES as $name => $values) {
// init for array_merge
if (!isset($files[$name])) {
$files[$name] = array();
}
if (!is_array($values["error"])) {
// normal syntax
$files[$name] = $values;
} else {
// html array feature
foreach ($values as $fileInfoKey => $subArray) {
$files[$name] = array_replace_recursive($files[$name], $walker($subArray, $fileInfoKey, $walker));
}
}
}

Return $files;
}

10 years ago

If you try and upload files with multi-dimensional names like this:


You will get an unexpected format like this:

array(
"submission" => array
"name" => array("screenshot" => "monster_wallpaper.jpg" ),
"type" => array("screenshot" => "image/jpeg" ),
"tmp_name" => array("screenshot" => "/tmp/php48lX2Y" ),
"error" => array("screenshot" => 0 ),
"size" => array("screenshot" => 223262 ),
),
....
?>

You can use the following function to re-format the array recursively in the usual format:

function format_files_array ($files , $name = null , & $new = false , $path = false ){
$names = array("name" => "name" , "type" => "type" , "tmp_name" => "tmp_name" , "error" => "error" , "size" => "size" );

Foreach($files as $key => & $part )
{
$key = (string) $key ;
if(in_array ($key , $names ))
$name = $key ;
if(! in_array ($key , $names ))
$path = $key ;
if(is_array ($part ))
$part = format_files_array ($part , $name , $new , $path );
elseif(! is_array ($part ))
{
$current =& $new ;
foreach($path as $p )
$current =& $current [ $p ];
$current [ $name ] = $part ;
unset($path );
$name = null ;
}
}

Return $new ;
}
?>