Як отримати повний шлях до вибраного файлу при зміні <input type = 'file'> за допомогою javascript, jquery-ajax?


240

Як отримати повний шлях до файлу під час вибору файлу за допомогою <input type=‘file’>

<input type="file" id="fileUpload">
<script type="text/javascript">
function getFilePath(){
     $('input[type=file]').change(function () {
         var filePath=$('#fileUpload').val(); 
     });
}
</script>

але varPapp only nameфайл містить вибраний файл, а не той full path.
Я шукав його в мережі, але здається, що з міркувань безпеки браузери (FF, хром) просто дають ім'я файлу.
Чи є інший спосіб отримати повний шлях до вибраного файлу?




@nauphal дякую за коментар, але чи є інший спосіб отримати повний шлях до вибраного файлу?
Йогеш Пінгл

1
Якщо ви хочете отримати шлях до файлу до сервера (наприклад, побудувати веб-інтерфейс до утиліти командного рядка для запуску на сервері), ви завжди можете створити відносний шлях, надіслати його по як <option> s та використовуйте віджет дерева або введіть вперед, щоб дозволити користувачеві вибрати його, а потім сервер обробити файл.
dardenfall

Відповіді:


164

З міркувань безпеки браузери цього не дозволяють, тобто JavaScript у браузері не має доступу до файлової системи, проте за допомогою API файлу HTML5, лише Firefox надає mozFullPathвластивість, але якщо ви спробуєте отримати значення, він повертає порожню рядок:

$('input[type=file]').change(function () {
    console.log(this.files[0].mozFullPath);
});

http://jsfiddle.net/SCK5A/

Тому не витрачайте час.

редагувати: Якщо вам потрібен шлях до читання файлу, замість цього ви можете скористатися API FileReader . Ось відповідне питання щодо SO: Попередній перегляд зображення перед його завантаженням.


1
Дивіться це посилання, оскільки це допомогло мені з тим же питанням.
Амір Тугі


І все-таки він отримав мені URL-адресу для шляху для відправки на сервер
Амір Тугі

1
@AmirTugi Це рішення читає файл. Це не має нічого спільного з шляху до файлу у файловій системі користувача.
визначено

То як цей веб-сайт міг це зробити?
SaidbakR

102

Спробуйте це:

Це дасть вам тимчасовий шлях не точний шлях, ви можете використовувати цей скрипт, якщо ви хочете показати вибрані зображення, як у цьому прикладі jsfiddle (Спробуйте, вибравши зображення, а також інші файли): -

JSFIDDLE

Ось код: -

HTML: -

<input type="file" id="i_file" value=""> 
<input type="button" id="i_submit" value="Submit">
<br>
<img src="" width="200" style="display:none;" />
<br>
<div id="disp_tmp_path"></div>

JS: -

$('#i_file').change( function(event) {
    var tmppath = URL.createObjectURL(event.target.files[0]);
    $("img").fadeIn("fast").attr('src',URL.createObjectURL(event.target.files[0]));

    $("#disp_tmp_path").html("Temporary Path(Copy it and try pasting it in browser address bar) --> <strong>["+tmppath+"]</strong>");
});

Це не зовсім те, що ви шукали, але, можливо, це може вам десь допомогти.


Чи можливо це зробити з іншими типами файлів: pdf, docx тощо, і замість зображення так відображається значок? Для своїх цілей я хочу зберігати файли на сторінці, перш ніж надсилати їх, даючи користувачеві можливість додати коментар, щоб завантажити його, як повідомлення з текстом.
user1040975

Чи потрібно лише помістити вміст "tmppath" в адресний рядок браузера? Я спробував, і це не працює.
MacGruber

@GangsarSwaPurba На жаль, він не працює в IE9 - див. URL.createObjectURL () .
naXa

@naXa добре, я відредагую свій коментар вище. uw, на жаль, я не можу редагувати свій коментар
Gangsar Swapurba

2
У 3-му рядку слід використовувати змінну tmppath замість URL.createObjectURL (event.target.files [0]), це більш оптимізовано.
Wessam El Mahdy

17

Ви не можете цього зробити - браузер не дозволить цього зробити через проблеми безпеки.

Коли файл вибирається за допомогою об'єкта input type = файл, значення властивості значення залежить від значення параметра "Включити шлях до локального каталогу під час завантаження файлів на сервер" для параметра безпеки зони безпеки, що використовується для відображення веб-сторінки містить об'єкт введення.

Повноцінне ім'я вибраного файлу повертається лише тоді, коли цей параметр увімкнено. Якщо налаштування вимкнено, Internet Explorer 8 замінює шлях локального диска та каталогу рядком C: \ fakepath \, щоб запобігти розкриттю невідповідної інформації.

Та інші

Ви пропустили );це в кінці функції події зміни.

Також не створюйте функції для події зміни, а просто використовуйте її, як показано нижче,

<script type="text/javascript">

    $(function()
    {
        $('#fileUpload').on('change',function ()
        {
            var filePath = $(this).val();
            console.log(filePath);
        });
    });

</script>

19
Спробував ваш код, але це дало мені неправильний шлях. мій файл знаходиться в Dкаталозі, але значення надходитьC:\fakepath\test.xls
Rahul Munjal

3
C: \ fakepath \ fileName.xls ... хтось знає, як це вирішити?
Андре Дос Сантос

14

Ви не можете. Безпека зупиняє вас за те, що ви знаєте що-небудь про систему реєстрації клієнтського комп’ютера - її може навіть не бути! Це може бути MAC, ПК, планшет або холодильник з інтернетом - ви не знаєте, не вмієте і не знаєте. І якщо ви маєте повний шлях, ви можете дати деяку інформацію про клієнта - особливо, якщо це, наприклад, мережевий диск.

Насправді ви можете отримати його за певних умов, але він вимагає контролю ActiveX, і він не працюватиме за 99,99% обставин.

Ви не можете використовувати його для відновлення файлу до початкового місця (так як ви абсолютно не маєте контролю над тим, де зберігаються завантаження, або навіть якщо вони зберігаються), так що на практиці це вам все-таки не корисно.


11

Ви це мали на увазі?

$('#i_file').change( function(event) {
var tmppath = URL.createObjectURL(event.target.files[0]);
    $("img").fadeIn("fast").attr('src',tmppath);       
});

4
це не дає шляху до файлу. Чому так багато разів обрали?
FlowUI. SimpleUITesting.com

7

Ви можете використовувати наступний код, щоб отримати діючу локальну URL-адресу для завантаженого файлу:

<script type="text/javascript">    
    var path = (window.URL || window.webkitURL).createObjectURL(file);
    console.log('path', path);
</script>

4

Одне цікаве зауваження: хоча це не доступно в Інтернеті, якщо ви використовуєте JS в Electron, ви можете це зробити.

За допомогою стандартного введення файлів HTML5 ви отримаєте додаткову pathвластивість для вибраних файлів, що містить реальний шлях до файлу.

Повні документи тут: https://github.com/electron/electron/blob/master/docs/api/file-object.md


1

Ви можете, якщо завантаження цілої папки - це варіант для вас

<input type="file" webkitdirectory directory multiple/>

подія зміни міститиме:

.target.files[...].webkitRelativePath: "FOLDER/FILE.ext"

1

ви ніколи не повинні цього робити ... і я думаю, що спробувати це в останніх браузерах марно (з того, що я знаю) ... всі останні браузери з іншого боку, це не дозволять ...

деякі інші посилання, які ви можете пройти, щоб знайти вирішення на зразок отримання сервера значень, але не на стороні client (javascript)

Повний шлях від введення файлів за допомогою jQuery
Як отримати шлях до файлу з форми введення HTML у Firefox 3


-1

У файловому елементі є і виклик масиву filesмістить всі необхідні речі

var file = document.getElementById("upload");

file.addEventListener("change", function() {
    for (var i = 0; i < file.files.length; i++) {
        console.log(file.files[i].name);
    }
}, false);

2
Він не забезпечує повний шлях до завантаженого файлу.
Маре

-3

Ви можете отримати повний шлях обраного файлу для завантаження лише IE11 та MS Edge.

var fullPath = Request.Form.Files["myFile"].FileName;
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.