Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Ограничение размера нескольких файлов (https://javascript.ru/forum/misc/63937-ogranichenie-razmera-neskolkikh-fajjlov.html)

rodiony4 09.07.2016 18:11

Ограничение размера нескольких файлов
 
Здравствуйте
Чтобы ограничить размер файла вложения 5мб, можно сделать так:
<input type="file" class="attach-more" onchange="attach(this)"><br>
<input type="file" class="attach-more" onchange="attach(this)"><br>
<div id="err_attach"></div>

<script type="text/javascript">
function attach(input){
	var attach_size = 5*1024*1024; //5мб
	var attach_file = input.files[0];
	if(attach_file.size > attach_size){
		$('#err_attach').html('Размер вложений ограничен 5 мб!');
		$('.attach-more').val(''); //удалить аттач, если превышен размер файла
	} 
};
</script>

Пожалуйста, подскажите, как можно сделать ограничение теме же 5мб если инпутов type=file несколько
например,
в первый инпут выбирается файл 4мб - все ОК, файл для вложения выбран
во второй инпут выбирается файл 2мб, общий размер двух файлов превышен (4+2=6), и в этом случае второй инпут должен остаться пустым

Erolast 09.07.2016 18:40

На сервере проверка продублирована?

rodiony4 09.07.2016 18:49

Цитата:

Сообщение от Erolast (Сообщение 421690)
На сервере проверка продублирована?

нет, не нужно

Erolast 09.07.2016 19:27

Цитата:

нет, не нужно
Я открою инспектор, удалю обработчик onchange на инпутах и спокойно залью пару гигов.
Либо даже не буду открывать браузер и через curl направлю /dev/urandom на сервер.

Уверен, что не нужно?

rodiony4 09.07.2016 19:49

Цитата:

Сообщение от Erolast (Сообщение 421693)
Уверен, что не нужно?

уверен
ограничение на размер делаю для того, чтобы письмо с вложением могло отправиться (почтовые сервера делают ограничения на аттач 10-20мб). Пользователь конечно может открыть инспектор и удалить обработчик onchange или инпут или всю форму, но это уже его проблемы..

Erolast 09.07.2016 21:16

Ну ладно.

Как-то так:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>File attachment</title>
  </head>
  <body>
    <form id="files" action="/send-a-file" method="post">
      <input type="file" class="attach-more">
      <input type="file" class="attach-more">
    </form>
    
    <script>
      $("#files").bind("change", function(event) {
        var max_attachments_size_allowed = 5 * 1024 * 1024; //5мб
        var attachments_size = 0;

        $('#files input[type=file]').each(function() {
          attachments_size += this.files[0].size;
        });

        if (attachments_size > max_attachments_size_allowed) {
          $('#err_attach').html('Размер вложений ограничен 5 мб!');
          event.target.value = '';
        }
      })
    </script>
  </body>
</html>

rodiony4 09.07.2016 21:43

Erolast, у меня почему то не работает
http://www.tatuning.ru/Untitled-2.html

Erolast 09.07.2016 21:56

Это я неправильный код привел, забыл обработчик провесить. Уже поправил, теперь работает.

rodiony4 09.07.2016 22:14

Erolast, не совсем так как я хотел
сейчас, например, выбираю файл в первом инпуте размером 12мб - ограничение не срабатывает
выбираю файл 1мб во втором инпуте - ограничение сработало (12+1=13мб)

laimas 10.07.2016 00:26

Цитата:

Сообщение от rodiony4
но это уже его проблемы..

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

rodiony4 10.07.2016 00:44

Цитата:

Сообщение от laimas (Сообщение 421702)
Это будут ваши проблемы, почта отправляется не от имени клиента, а от имени вашего хоста.

пользователь что то удалил в инспекторе и письмо не отправилось - это мои проблемы? может быть он в браузере отключит JS - я тоже виноват?

laimas 10.07.2016 01:13

Цитата:

Сообщение от rodiony4
может быть он в браузере отключит JS - я тоже виноват?

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

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

Erolast 10.07.2016 08:14

Цитата:

сейчас, например, выбираю файл в первом инпуте размером 12мб - ограничение не срабатывает
Потому что возникает ошибка исполнения.

Поправил:
$("#files").bind("change", function(event) {
  var max_attachments_size_allowed = 5 * 1024 * 1024; //5мб
  var attachments_size = 0;

  $('#files input[type=file]').each(function() {
*!*
    if (this.files[0]) {
    	attachments_size += this.files[0].size;
    }
*/!*
  });
  
  console.log(attachments_size);
  console.log(max_attachments_size_allowed);

  if (attachments_size > max_attachments_size_allowed) {
    $('#err_attach').html('Размер вложений ограничен 5 мб!');
    event.target.value = '';
  }
});

rodiony4 10.07.2016 11:37

Erolast, большое спасибо!

warren buffet 10.07.2016 23:55

Цитата:

Сообщение от Erolast
На сервере проверка продублирована?

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

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

Erolast 11.07.2016 05:28

Цитата:

Не поможет. php включается после того, как сервер охренел от превышения лимита уплоада. То есть цивильно отчитаться о нарушении правил будет геморройно.
А что, ТС где-то упоминал, что у него php?

Энивей, http://stackoverflow.com/questions/2...load-file-size.
Либо потоковый интерфейс - http://php.net/manual/en/ini.core.ph...t-data-reading, http://php.net/manual/en/function.st...-to-stream.php, http://php.net/manual/en/function.fopen.php.


Часовой пояс GMT +3, время: 23:09.