Имя файла, выбранного в поле файла [дубликат]

Если вы хотите отправить данные формы с помощью Ajax.Это способ отправить

var formData = new FormData();

//File Upload
   var totalFiles = document.getElementById("Iupload").files.length;


for (var i = 0; i < totalFiles; i++) {
    var file = document.getElementById("Iupload").files[i];

    formData.append("Document", file);
}

formData.append("NameCode", $('#SelecterID').val());
formData.append("AirLineCode", $('#SelecterID').val());


$.ajax({
        url: "/Controller/ActionName",
        type: "POST",
        dataType: "JSON",
        data: formData,
        contentType: false,
        processData: false,
        success: function (result) {
    }
})
192
задан Michał Perłakowski 10 February 2016 в 21:22
поделиться

10 ответов

Я рад, что браузеры хотят спасти нас от навязчивых скриптов и т. п. Я не доволен тем, что IE помещает что-то в браузер, что делает простой стиль-fix похожим на хакерскую атаку!

Я использовал & lt; span>, чтобы представить входной файл, чтобы я мог применить соответствующий стиль к & lt; div> вместо & lt; input> (еще раз, из-за IE). Теперь из-за этого IE хочет показать пользователю путь со значением, который просто гарантированно поставит их на страже и, по крайней мере, опасается (если не полностью их отпугнуть?!) ... БОЛЬШЕ IE-CRAP!

Во всяком случае, благодаря тем, кто разместил объяснение здесь: Безопасность браузера IE: добавление «fakepath» в путь к файлу во входном файле [type = «file»] , я собрал minor fixer-upper ...

Нижеприведенный код выполняет две функции: он исправляет ошибку IE8, в которой событие onChange не срабатывает до тех пор, пока поле onBlur не выведет поле и не обновит элемент с очищенным файловым пути, который не пугает пользователя.

// self-calling lambda to for jQuery shorthand "$" namespace
(function($){
    // document onReady wrapper
    $().ready(function(){
        // check for the nefarious IE
        if($.browser.msie) {
            // capture the file input fields
            var fileInput = $('input[type="file"]');
            // add presentational <span> tags "underneath" all file input fields for styling
            fileInput.after(
                $(document.createElement('span')).addClass('file-underlay')
            );
            // bind onClick to get the file-path and update the style <div>
            fileInput.click(function(){
                // need to capture $(this) because setTimeout() is on the
                // Window keyword 'this' changes context in it
                var fileContext = $(this);
                // capture the timer as well as set setTimeout()
                // we use setTimeout() because IE pauses timers when a file dialog opens
                // in this manner we give ourselves a "pseudo-onChange" handler
                var ieBugTimeout = setTimeout(function(){
                    // set vars
                    var filePath     = fileContext.val(),
                        fileUnderlay = fileContext.siblings('.file-underlay');
                    // check for IE's lovely security speil
                    if(filePath.match(/fakepath/)) {
                        // update the file-path text using case-insensitive regex
                        filePath = filePath.replace(/C:\\fakepath\\/i, '');
                    }
                    // update the text in the file-underlay <span>
                    fileUnderlay.text(filePath);
                    // clear the timer var
                    clearTimeout(ieBugTimeout);
                }, 10);
            });
        }
    });
})(jQuery);
11
ответ дан Anand Sharma 22 August 2018 в 23:32
поделиться
  • 1
    Обратите внимание, что это не работает на IE, следовательно; Я заменил следующее: filePath.substring (filePath.lastIndexOf ('\\') + 1, filePath.length) – Bassel Kh 3 September 2017 в 07:28

кажется, что вы не можете найти полный путь в вашем localhost by js, но вы можете скрыть fakepath, чтобы просто показать имя файла. Используйте jQuery, чтобы получить выбранное имя файла ввода файла без пути

1
ответ дан Community 22 August 2018 в 23:32
поделиться

Если вам действительно нужно отправить полный путь к uploded файлу, то вам, вероятно, придется использовать что-то вроде подписанного java-апплета, поскольку нет никакой возможности получить эту информацию, если браузер не отправит его .

3
ответ дан jcoder 22 August 2018 в 23:32
поделиться
  • 1
    @pointy, действительно Итак, я должен изменить свой дизайн сейчас :( – e_maxm 31 January 2011 в 15:02

Используйте

document.getElementById("file-id").files[0].name; 

вместо

document.getElementById('file-id').value
46
ответ дан Manwal 22 August 2018 в 23:32
поделиться
  • 1
    В Chrome 44.0.2403.125 это дает вам только имя файла. – gap 5 August 2015 в 19:31
  • 2
    только дает имя файла ... Неправильный ответ сейчас – Abhijit Chakra 11 October 2017 в 07:02
  • 3
    Затем используйте файл document.getElementById («file-id»). Files [0] .path. Прекрасно работает для меня. – Loaderon 11 February 2018 в 18:08

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

138
ответ дан Michał Perłakowski 22 August 2018 в 23:32
поделиться
  • 1
    Если браузер не отправляет локальный путь к файлу, нет способа узнать его. – Petteri Hietavirta 31 January 2011 в 14:53
  • 2
    Нет, жаль – jcoder 31 January 2011 в 14:53
  • 3
    Просто отправьте форму: браузер позаботится о загрузке. Ваш веб-сайт не должен знать полный путь назад на клиенте. – Rup 31 January 2011 в 15:09
  • 4
    Я сомневаюсь, что есть что-то злое, которое обычный веб-сайт может сделать для вашей локальной машины без какого-либо доверенного плагина, такого как Flash или Java. Это более конфиденциальная вещь. Например, если вы загружаете со своего рабочего стола, вы должны сообщить серверу свое имя пользователя на вашем локальном компьютере или домене (c:\users\myname\desktop или /Users/myname/Desktop/ или что угодно). Это не то, что веб-сервер знает о бизнесе. – Joe Enos 21 June 2013 в 16:46
  • 5
    Конфиденциальность почти всегда относится к безопасности и уязвимости, поскольку информация может быть использована против кого-то. Атаки часто используют несколько проблем для достижения своих целей. Любой, кто не признает опасности, не должен допускаться рядом с кодом, отличным от Hello World, без дополнительных практических семинаров. – Archimedix 9 September 2013 в 13:34

Если вы перейдете в Internet Explorer, Tools, Internet Option, Security, Custom, найдите «Включить путь к локальному каталогу При загрузке файлов на сервер» (это довольно просто) и нажмите «Включить». Это будет работать

34
ответ дан saikiran1043 22 August 2018 в 23:32
поделиться

Hy там, в моем случае я использую среду разработки asp.net, поэтому я хочу загрузить эти данные в asynchronus ajax-запрос, в [webMethod] вы не можете поймать загрузчик файлов, поскольку он не является статическим элементом, поэтому я должен был сделать оборот для такого решения, установив путь, чем преобразовать желаемое изображение в байты, чтобы сохранить его в БД.

Вот моя функция javascript, надеюсь, что вам это поможет:

function FixPath(Path)
         {
             var HiddenPath = Path.toString();
             alert(HiddenPath.indexOf("FakePath"));

             if (HiddenPath.indexOf("FakePath") > 1)
             {
                 var UnwantedLength = HiddenPath.indexOf("FakePath") + 7;
                 MainStringLength = HiddenPath.length - UnwantedLength;
                 var thisArray =[];
                 var i = 0;
                 var FinalString= "";
                 while (i < MainStringLength)
                 {
                     thisArray[i] = HiddenPath[UnwantedLength + i + 1];
                     i++;
                 }
                 var j = 0;
                 while (j < MainStringLength-1)
                 {
                     if (thisArray[j] != ",")
                     {
                         FinalString += thisArray[j];
                     }
                     j++;
                 }
                 FinalString = "~" + FinalString;
                 alert(FinalString);
                 return FinalString;
             }
             else
             {
                 return HiddenPath;
             }
         }

здесь только для тестирования:

 $(document).ready(function () {
             FixPath("hakounaMatata:/7ekmaTa3mahaLaziz/FakePath/EnsaLmadiLiYghiz");
         });
// this will give you : ~/EnsaLmadiLiYghiz
0
ответ дан Shiva Brahma 22 August 2018 в 23:32
поделиться

Я столкнулся с той же проблемой. В IE8 его можно было бы обработать, создав скрытый ввод после управления вводом файлов. Заполните это значением его предыдущего брата. В IE9 это также исправлено.

Моя причина в том, чтобы узнать полный путь, заключалась в создании предварительного просмотра изображения javascript перед загрузкой. Теперь я должен загрузить файл, чтобы создать предварительный просмотр выбранного изображения.

4
ответ дан Telefoontoestel 22 August 2018 в 23:32
поделиться
  • 1
    Если кто-то хочет увидеть изображение перед загрузкой, он может просматривать его на своем компьютере. – mbomb007 6 July 2018 в 14:42

Я использую объект FileReader на входе onchange для вашего типа входного файла! В этом примере используется функция readAsDataURL, и по этой причине у вас должен быть тег. Объект FileReader также имеет readAsBinaryString для получения двоичных данных, которые впоследствии могут быть использованы для создания того же файла на вашем сервере

Пример:

var input = document.getElementById("inputFile");
var fReader = new FileReader();
fReader.readAsDataURL(input.files[0]);
fReader.onloadend = function(event){
    var img = document.getElementById("yourImgTag");
    img.src = event.target.result;
}
27
ответ дан user2025187 22 August 2018 в 23:32
поделиться
  • 1
    любая идея, почему даже это не работает на localhost? источник устанавливается как src = "C: \ fakepath \ filename.jpg & quot; , но console.logging элемент изображения говорит, что src является dataURL – galki 18 August 2015 в 06:51
  • 2
    ответ: рендеринг позвоночника: / – galki 18 August 2015 в 07:17
  • 3
    Вы не представляете, насколько сильно разочарование эта запись сохранена. Это бриллиант в грубой ... только 12 голосов, но заслуживающий гораздо большего. Рад, что я посмотрел дальше, потому что другие записи с гораздо более высокими приоритетами не работали, а FormData () не будет делать трюк для наших целей. Отлично сработано! – user1585204 9 June 2017 в 14:04
  • 4
    Вопрос заключается в запросе файла path , а не содержимого файла. – Quentin 29 August 2017 в 10:47
  • 5
    @Quentin: да, вы правы, но очистить намерение OP - это как-то возможно загрузить файл на сервер. Таким образом, это решение будет работать, безусловно, очень полезно для всех людей, которые ищут способ загрузки файлов на сервер с помощью JS. – user18490 22 September 2017 в 18:33
  • 6
0
ответ дан Marcos Di Paolo 5 November 2018 в 21:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: