Используя jQuery, Ограничивая Размер файла Перед Загрузкой

Примечание: Преобразование в строковое преобразование

Это происходит просто, если вы пытаетесь рассматривать массив как строку:

$arr = array('foo', 'bar');

echo $arr;  // Notice: Array to string conversion
$str = 'Something, ' . $arr;  // Notice: Array to string conversion

Массив не может быть просто echo 'd или конкатенируется с строкой, потому что результат не определен. PHP будет использовать строку «Array» вместо массива и вызвать уведомление, чтобы указать, что это, вероятно, не то, что было предназначено, и что вы должны проверять свой код здесь. Вероятно, вы захотите что-то вроде этого:

echo $arr[0];  // displays foo
$str = 'Something ' . join(', ', $arr); //displays Something, foo, bar

Или зациклируйте массив:

foreach($arr as $key => $value) {
    echo "array $key = $value";
    // displays first: array 0 = foo
    // displays next:  array 1 = bar
}

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

47
задан Felipe Sabino 14 August 2013 в 03:12
поделиться

5 ответов

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

Из соображений безопасности ajax / JavaScript не позволяют получить доступ к потоку файла или свойствам файла прежде или во время загрузки.

8
ответ дан Todd Smith 26 November 2019 в 19:46
поделиться

Я встретился с той же проблемой. Необходимо использовать ActiveX или Flash (или Java). Хорошая вещь состоит в том, что это не должно быть агрессивно. У меня есть простой метод ActiveX, который возвратит размер загруженного будущим образом файла.

, Если Вы идете с Flash, можно даже сделать некоторое воображение js/css к cusomize опыт загрузки - только использование Flash (как 1x1 "фильм") для доступа, это - функции загрузки файла.

4
ответ дан EndangeredMassa 26 November 2019 в 19:46
поделиться

Я нашел, что Apache2 (Вы могли бы хотеть также проверить Apache 1.5), имеет способ ограничить это прежде, чем загрузить путем отбрасывания этого в .htaccess файле:

LimitRequestBody 2097152

Это ограничивает его 2 мегабайтами (2 * 1024 * 1024) на загрузке файла (если я сделал свою математику байта правильно).

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

Requested content-length of 4000107 is larger than the configured limit of 2097152

И это также отобразит это сообщение назад в веб-браузере:

<h1>Request Entity Too Large</h1>

Так, при выполнении сообщений формы Ajax с чем-то как Плагин Формы jQuery Malsup Вы могли захватить для ответа H1 как это и показать ошибочный результат.

Между прочим, возвращенный код ошибки 413. Так, Вы могли использовать директиву в своем .htaccess файле как...

Redirect 413 413.html

... и обеспечивают более корректный ошибочный результат назад.

4
ответ дан 2 revsMike McKee 26 November 2019 в 19:46
поделиться

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

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

http://www.uploadify.com/

http://swfupload.org/

2
ответ дан 26 November 2019 в 19:46
поделиться

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

list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img src=\"img/flag.jpg\" $attr alt=\"getimagesize() example\" />";
0
ответ дан 26 November 2019 в 19:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: