Jump to content
  • 0

Получение пути к файлу


DjTarik
 Share

Question

Решил заняться стилизацией файл-инпута, и столкнулся с проблемой.

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

JS только-только начал осваивать, поэтому прошу помощи, разъяснений и понимания =)

Задача:

Передать путь выбранного файла в другое поле input.

Интересует только этот кусок.

Код:

<input type="text" name="#" value="" id="extra_in" />
<input type="file" name="#" value="" onchange="ChangeInput(this,'extra_in')" />

JS:

<script type="text/javascript">
// <![CDATA[
function ChangeInput(obj,name)
{
document.getElementById(name).value = obj.value;
}
// ]]>
</script>

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

Пример:

В оригинале, если загрузить файл, я увижу: "E:\Downloads\pngfix.rar"

А после передачи в другой инпут: "pngfix.rar"

Это в FF3, в других тоже по разному.

Что-то подсказывает мне, что у меня изначально неверный подход и так в принципе нельзя делать.

Расскажите, как нужно?

Спасибо.

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0
Кажись получить путь к файлу нельзя из-за политики безопасности, по крайней мере не во всех браузерах. Точно не знаю, но по моему так.

А как тогда он вписывает в поле, что находится слева от кнопки, этот адрес? O_o

Про "политики безопасности" тоже читал...

Link to comment
Share on other sites

  • 0
На самом деле существует очень много уже готовых решений для стилизации файлового инпута и можно не изобретать велосипед;)

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

Link to comment
Share on other sites

  • 0

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

Link to comment
Share on other sites

  • 0

Насколько я понимаю, в обработчик мы передаем связку 'name-value'. Значит путь к картинке должен находится именно в 'value'. Но в моем варианте - это самое 'value' везде разное:

В ff3 и Chrome - просто имя файла,

в Opera - C:\fake_path\имя файла,

в IE и Safari - полный путь к картинке.

Если никак не получается добраться до полного пути (кроссбраузерно) - то каким способом можно обрезать все лишнее, оставив только имя_файла.расширение?

Link to comment
Share on other sites

  • 0
Тыц. Вот тут вроде достаточно подробно всё расписано.

Как раз таки отсюда и брал информацию)

А еще тут:

http://absolvo.ru/2009-04-10/kastomizaciya...-pomoshhyu-css/

http://html-css.info/2009/07/css-input-type-file/

http://sdelaisait.com.ua/styling-input-type-file/

=)

Весь инет перерыл)

Вот кусок кода:

file = fileInput.value;
reWin = /.*(.*)/;
var fileTitle = file.replace(reWin, "$1"); //выдираем название файла для windows
reUnix = /.*/(.*)/;
fileTitle = fileTitle.replace(reUnix, "$1"); //выдираем название файла для unix-систем
fileName.innerHTML = fileTitle;
var RegExExt =/.*.(.*)/;
var ext = fileTitle.replace(RegExExt, "$1");//и его расширение

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

Но я НУБ в JS - не получается под себя сделать.

Подскажите, на моем примере:

<script type="text/javascript">
// <![CDATA[
function ChangeInput(obj,name)
{
document.getElementById(name).value = obj.value;
}
// ]]>
</script>

(я передаю значение из одного инпута в другой)

В разных браузерах по разному отображается имя (писал выше).

- как мне обрезать ненужные символы? А именно, до последнего слэша?

Нужно регулярное выражение, или еще как-нить... O_o

Link to comment
Share on other sites

  • 0
А что у тебя не получается?

Я передаю значение (value) из одного инпута в другой.

В разных браузерах по разному отображается имя:

В ff3 и Chrome - просто имя файла,

в Opera - C:\fake_path\имя файла,

в IE и Safari - полный путь к картинке.

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

Пример:

(находиться в value)

было:

F:\Мои документы\Папка\file.rar

стало:

file.rar

Как обрезать строку?

Link to comment
Share on other sites

  • 0

Прочитал в Инете не только на этом сайте.

Кто сможет дать собержательный ответ:

1. Можно или нет передать данные через событие onchange из input t=file в input t=text,

при условии что необхобимо передать путь + имя файла?

2. Почему ff3 и Chrome - просто имя файла, в Opera - C:\fake_path\имя файла (у самого так, с начала подумал что "fake_path" - из-за вирусов, что исключил сразу)?

3. Как быть если нужно выполнить 1-й вопрос в кросс брузном исполнении?

Link to comment
Share on other sites

  • 0
Ну и что ты "замутил"?

Если решил: "что и по чём", то отпишись по нормальному!

Ну, просто тему я создавал - сам вопрос придумал - сам и ответил))) На мысль натолкнули - спасибо.

По твоим вопросам:

1. Можно, но передавать только значение value, а оно в некоторых броузерах разное (см.выше).

2. ХЗ - но оно разное) По идее это что-то типо защиты от несанкционированной загрузки.

3. Сделал так:

Получил строку типа:

F:\Мои документы\Папка\file.rar

или же file.rar

или же C:\fake_path\file.rar

(зависит от броузера)

Далее проверил, есть ли в строке символ "\" - если есть - вырезаем всё, что идёт до последнего слэша.

если нет - возвращаем начальную строку.

Присваиваем полученный путь в нужный value.

Все.

p.S. По идее работать будет везде, но только под виндовс. Т.к. по моему на разных платформах разные "пути" к файлам, т.е. "\" может быть и "/".

Edited by DjTarik
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy