<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
Но мне нужен локальный полностью квалифицированный путь к файлу. Как решить эту проблему?
Если это связано с проблемой безопасности браузера, то каким должен быть альтернативный способ решения этой проблемы?
Некоторые браузеры имеют функцию безопасности, которая не позволяет JavaScript узнать полный путь к вашему файлу. Это имеет смысл - как клиент, вы не хотите, чтобы сервер знал вашу локальную файловую систему. Было бы неплохо, если бы все браузеры делали это.
Использовать
document.getElementById("file-id").files[0].name;
вместо
document.getElementById('file-id').value
Если вы идете в Интернет Эксплорер, инструменты, интернет, охрана, таможня, найти в "включают в себя локальную папку путь При загрузке файлов на сервер и" (это довольно далеко) и нажать на "включить" по . Это будет работать
Я использую объект FileReader на событие вход `onChange, после чего на ваш тип входного файла! В этом примере используется функция readAsDataURL и по этой причине вы должны иметь <ИМГ и GT; тег. Объект 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;
}
Я рад, что браузеры заботятся, чтобы спасти нас от навязчивых скриптов и тому подобное. Я не доволен т. е. что-то в браузер, что делает простой стиль-исправить похож на хак-атаки!
Я'вэ используется в < промежуток >, чтобы представлять файла ввода, так что я мог применить соответствующий стиль < див > вместо < вход > (еще раз, потому что с IE). Теперь из-за этого т. е. хочу's, чтобы показать пользователю путь со значением, что's просто гарантированно поставить их на страже и в меньшей мере настороженно (если не совсем отпугнуть их?!)... Т. Е.-ХРЕНЬ!
В любом случае, спасибо тому кто выложил объяснение здесь: браузер IE безопасности: добавление и"fakepath", чтобы путь к файлу на вход[тип=на"файл"], я'вэ собрать мелкие фиксаж-верхний...
Приведенный ниже код делает две вещи - он исправляет LTE в 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);
Я столкнулся с той же проблемой. В IE8 ее можно обойти, создав скрытый вход после элемента управления вводом файла. Он заполняется значением предыдущего элемента. В IE9 это также было исправлено.
Я хотел узнать полный путь, чтобы создать предварительный просмотр изображения на javascript перед загрузкой. Теперь мне нужно загрузить файл, чтобы создать предварительный просмотр выбранного изображения.
Если вам действительно нужно отправить полный путь к файлу, то, вероятно, вам придется использовать что-то вроде подписанного java-апплета, поскольку нет никакого способа получить эту информацию, если браузер не отправляет ее.
кажется, вы можете'т найти полный путь в ВЫ localhost на JS, но вы можете скрыть fakepath просто имя файла. https://stackoverflow.com/questions/6365858/use-jquery-to-get-the-file-inputs-selected-filename-without-the-path/6365883#6365883
Есть хы , в моем случае я использую среду разработки asp.net так я хочу, чтобы загрузить эти данные в запрос asynchronus Аякс , в [атрибутом 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
Используйте читателей файл:
$(document).ready(function() {
$("#input-file").change(function() {
var length = this.files.length;
if (!length) {
return false;
}
useImage(this);
});
});
// Creating the function
function useImage(img) {
var file = img.files[0];
var imagefile = file.type;
var match = ["image/jpeg", "image/png", "image/jpg"];
if (!((imagefile == match[0]) || (imagefile == match[1]) || (imagefile == match[2]))) {
alert("Invalid File Extension");
} else {
var reader = new FileReader();
reader.onload = imageIsLoaded;
reader.readAsDataURL(img.files[0]);
}
function imageIsLoaded(e) {
$('div.withBckImage').css({ 'background-image': "url(" + e.target.result + ")" });
}
}