2010-01-08 6 views
2

У меня есть <input type="file">, где пользователь выбирает файл изображения. Можно ли показывать это изображение на странице, не загружая его сначала на сервер? В основном, что я хочу сделать, это использовать локальный файл с компьютера пользователя.Показать выбранный файл без обратной передачи

PS - Я использую JQuery.

+0

Не уверен, но путь по файлу и использование файла: // протокол может это сделать. – Lazarus

+0

Кажется, что идти по пути невозможно. Еще одна мера безопасности. – niaher

ответ

5

Это невозможно, даже если ссылаться на файл с использованием file:// не будет работать, так как когда вы получите значение из поля ввода файла, вы получите только имя файла, а не путь. Поэтому невозможно определить, где находится изображение. Чтобы заставить его работать, вам придется использовать Flash-загрузчик.

Это, безусловно, мера безопасности, поскольку Internet Explorer дает вам путь, единственное, что всегда есть c:\fakepath\filename.png. Я предполагаю, что браузеры делают свою работу, не позволяя JavaScript получать какую-либо значимую информацию из файловой системы.

возвращаемые значения для различных браузеров при попытке загрузить файл C:\test.txt:

  • Firefox 3.5.6
    test.txt

  • Chrome 3.0.195.38
    test.txt

  • Opera 10.00
    C:\fake_path\test.txt

  • Internet Explorer 8
    C:\fakepath\test.txt

3

Нет, это невозможно. Javascript не имеет доступа к локальной файловой системе.

Что вы просите - это огромный риск для безопасности, замаскированный под «запрос функции». Если бы это было возможно, тогда javascript мог также открыть другие файлы с локального компьютера. Например, документы MS Word - вы знаете файлы, которые могут запускать скрипты.

+0

Javascript не может не использовать тег IMG, ссылающийся на работу файловой системы? Это, безусловно, происходит со статической страницы. – Lazarus

+0

Это сработало бы, ЕСЛИ вы могли бы получить локальный путь к файлу с помощью javascript. – kgiannakakis

1

Это не может быть надежно возможно в JavaScript. Возможно использование флеш-файлов, например, this one.

0

:-), Я думаю, что это довольно легко.

document.getElementByid('img1').src = document.getElementById('fileUpload').value; 

, но это возможно не во всех браузерах

+0

Это не сработает по причинам, упомянутым Тату Ульманеном. – niaher

0

можно в Internet Explorer, однако ваш пользователь должен добавить свой сайт в «Доверенные сайты», или C: \ fakepath \ все, что вы» я увижу. После добавления к доверенным сайтам вы получаете доступ к реальному пути.

Не ожидайте найти отличное кросс-браузерное решение!