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

#javascript #ajax #mootools

#javascript #ajax #mootools

Вопрос:

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

Вот что у меня есть сейчас—

http://jsfiddle.net/sTbFb/1/

 function doUpload(){
  var remoteFile = document.id('uploadRemote').get('value');
  var imageRequest = new Request({
      url:'index.php', 
      method: 'post',
      data: 'path=' remoteFile,
      onRequest: function() {
        console.log(remoteFile);
        var myimage = Asset.image(remoteFile,
          {
            //onError: imageRequest.cancel() // <-- this doesn't work either
            onError: this.cancel()
          }
        );
      },
      onSuccess: function(response) {
        alert(response);
      }
    }).send();
}

document.id('submit').addEvent('click', function(){
    doUpload();
});
  

Я пытаюсь использовать Asset.image, чтобы проверить, действительно ли путь является изображением, а затем, если это не так, отменить запрос. Однако это не работает.

Любые подсказки о том, что я делаю неправильно? Спасибо!

Ответ №1:

Вы не можете получить путь к выбранному файлу из <input type="file" /> . Таким образом, вы не сможете загрузить его перед загрузкой. Лучшее, что вы можете сделать, это проверить расширение файла.


Редактировать: возможно, проблема в этой строке:

 onError: this.cancel() 
  

Это должно быть:

 onError: function () {
    imageRequest.cancel();
}
  

Комментарии:

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

2. из скрипки — <тип ввода =»текст» идентификатор =»uploadRemote» значение =»»>

3. @julio — onError ожидает функцию, но вы присваиваете ей результат вызова функции. См. Редактирование моего ответа.

4. @gilly3— спасибо! Тем не менее, использование функции по-прежнему дает Uncaught TypeError: Cannot call method 'cancel' of undefined .

5. @julio вы можете сделать запрос head к удаленному изображению с php или другого языка на стороне сервера и проверить его mime-тип. Другим подходом было бы прочитать первые x байтов файла и проверить, является ли это изображением или нет. изображения в формате jpeg, gif, png имеют отдельный заголовок — это самый безопасный способ сделать это