Как разрешить C:\fakepath?
<input type="file" id="file-id" name="file_name" onchange="theimage();">
Это моя кнопка загрузки.
<input type="text" name="file_path" id="file-path">
Это текстовое поле, где я должен показать полный путь к файлу.
function theimage(){
var filename = document.getElementById('file-id').value;
document.getElementById('file-path').value = filename;
alert(filename);
}
Это JavaScript, который решает мою проблему. Но в предупреждающем значении дает мне
C:\fakepath\test.csv
и Mozilla дает мне:
test.csv
Но мне нужен локальный полный путь к файлу. Как решить эту проблему?
Если это связано с проблемой безопасности браузера, каков должен быть альтернативный способ сделать это?
Ответы
Ответ 1
В некоторых браузерах есть функция безопасности, которая запрещает JavaScript знать ваш полный локальный путь к файлу. Это имеет смысл - как клиент, вы не хотите, чтобы сервер знал вашу файловую систему локального компьютера. Было бы неплохо, если бы все браузеры сделали это.
Ответ 2
Если вы перейдете в Internet Explorer, "Инструменты", "Интернет-вариант", "Безопасность", "Пользовательский", найдите "Включить путь к локальному каталогу При загрузке файлов на сервер" (это довольно просто) и нажмите "Включить". Это будет работать
Ответ 3
Используйте
document.getElementById("file-id").files[0].name;
вместо
document.getElementById('file-id').value
Ответ 4
Я использую объект 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;
}
Ответ 5
Я рад, что браузеры хотят спасти нас от навязчивых скриптов и т.п. Я не доволен тем, что IE помещает что-то в браузер, что делает простой стиль-fix похожим на взломанную атаку!
Я использовал <span> , чтобы представить входной файл, чтобы я мог применить соответствующий стиль к <div> вместо <input> (еще раз, из-за IE). Теперь из-за этого IE хочет показать пользователю путь со значением, который просто гарантированно поставит их на страже и, по крайней мере, опасается (если не полностью отпугнуть их?!)... БОЛЬШЕ IE-CRAP!
В любом случае, благодаря тем, кто разместил объяснение здесь: Безопасность браузера IE: добавление "fakepath" к пути к файлу во входе [ type= "file" ], выложили малый фиксатор-верхний...
Нижеприведенный код выполняет две функции: он исправляет ошибку 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 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);
Ответ 6
Я столкнулся с той же проблемой. В IE8 его можно было бы обработать, создав скрытый ввод после управления вводом файлов. Заполните это значением предыдущего брата. В IE9 это также исправлено.
Моя причина в том, чтобы узнать полный путь, заключалась в том, чтобы создать предварительный просмотр javascript перед загрузкой. Теперь мне нужно загрузить файл, чтобы создать предварительный просмотр выбранного изображения.
Ответ 7
Если вам действительно нужно отправить полный путь к uploded файлу, то вам, вероятно, придется использовать что-то вроде подписанного java-апплета, так как нет никакой возможности получить эту информацию, если браузер не отправит его.
Ответ 8
Кажется, вы не можете найти полный путь в вашем localhost от js, но вы можете скрыть фейк-путь, чтобы просто показать имя файла. Используйте jQuery, чтобы получить выбранное имя файла ввода без пути