Как получить выбранный файл фактического пути вместо поддельного или временного пути к файлу? [Дубликат]

MySQL 8 изменил кодировку по умолчанию на utfmb4. Но некоторые клиенты не знают эту кодировку. Следовательно, когда сервер сообщает клиенту по умолчанию кодировку, а клиент не знает, что означает сервер, он выдает эту ошибку.

См. Также https://bugs.mysql.com /bug.php?id=71606

Эта ошибка относится к MySQL Connector / C ++, поэтому она затрагивает больше, чем просто PHP.

Хорошо, я получил это для работы изменив набор символов на utf8, чтобы быть совместимым с не обновленными клиентами. Я добавил это в /etc/my.cnf и перезапустил mysqld:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8

Я нашел эти параметры в ответе с 2010 года: Изменить символ по умолчанию MySQL на UTF-8 в my.cnf ?

165
задан Yogesh Pingle 4 March 2013 в 14:24
поделиться

9 ответов

В целях безопасности браузеры этого не допускают, то есть JavaScript в браузере не имеет доступа к файловой системе, однако, используя API файлов HTML5, только Firefox предоставляет свойство mozFullPath, но если вы попытаетесь получить значение, оно вернет пустая строка:

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

http://jsfiddle.net/SCK5A/

Поэтому не теряйте время.

edit: Если вам нужен путь к файлу для чтения файла, вы можете использовать API FileReader . Вот связанный вопрос о SO: Предварительный просмотр изображения перед его загрузкой.

103
ответ дан SaidbakR 22 August 2018 в 09:40
поделиться

Вы можете, если вы загружаете целую папку для вас

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

, событие изменения будет содержать:

.target.files[...].webkitRelativePath: "FOLDER/FILE.ext"
1
ответ дан Blauhirn 22 August 2018 в 09:40
поделиться

вы никогда не должны этого делать .... и я думаю, что попробовать его в последних браузерах бесполезно (из того, что я знаю) .. все последние браузеры, с другой стороны, не позволят этого ....

некоторые другие ссылки, которые вы можете пройти, чтобы найти обходной путь, как получение значения serveride, но не в clientide (javascript)

Полный путь от ввода файла с помощью jQuery Как получить путь к файлу из формы ввода HTML в Firefox 3

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

Вы не можете этого сделать - браузер не допустит этого из-за проблем с безопасностью.

Когда файл выбирается с использованием типа input type = file, значение свойства value зависит о значении параметра безопасности «Включить локальный каталог при загрузке файлов на сервер» для зоны безопасности, используемой для отображения веб-страницы, содержащей входной объект.

Полноценное имя файла выбранного файла возвращается, только когда этот параметр включен. Когда параметр отключен, Internet Explorer 8 заменяет путь локального диска и каталога на строку C: \ fakepath \, чтобы предотвратить неприемлемое раскрытие информации.

И другие

Вы пропустили ); это в конце функции события изменения.

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

<script type="text/javascript">

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

</script>
17
ответ дан Dipesh Parmar 22 August 2018 в 09:40
поделиться
  • 1
    Попробовал свой код, но он дал мне неправильный путь. мой файл находится в директории D, но значение идет C:\fakepath\test.xls – Rahul Munjal 30 January 2015 в 20:42
  • 2
    C: \ fakepath \ fileName.xls ... кто-нибудь знает, как это решить? – André Dos Santos 1 August 2016 в 23:49

имеет элемент массива и вызов массива 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);
0
ответ дан Jeeva Kumar 22 August 2018 в 09:40
поделиться

Вы не можете. Безопасность останавливает вас за то, что вы знаете что-либо о системе подачи клиентского компьютера - у нее может и не получиться! Это может быть MAC, ПК, планшет или интернет-холодильник - вы не знаете, не можете знать и не знать. И пусть вам полный путь может дать вам некоторую информацию о клиенте - особенно, если это сетевой диск, например.

Фактически вы можете получить его в определенных условиях, но для этого требуется элемент управления ActiveX, и не будет работать в 99,99% случаев.

Вы все равно не можете использовать его для восстановления файла в исходное местоположение (так как вы абсолютно не контролируете, где хранятся загрузки, или даже если они хранится), так что на практике это не так много для вас.

11
ответ дан Rajshekar Reddy 22 August 2018 в 09:40
поделиться

Вы имели в виду это?

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

10
ответ дан Rubyrider 22 August 2018 в 09:40
поделиться

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

<script type="text/javascript">    
    var path = (window.URL || window.webkitURL).createObjectURL(file);
    console.log('path', path);
</script>
5
ответ дан Steffen Brem 22 August 2018 в 09:40
поделиться

Попробуйте это:

Это даст вам временный путь, а не точный путь, вы можете использовать этот скрипт, если хотите показать выбранные изображения, как в этом примере 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>");
});

Не то, что вы искали, но может быть, это может помочь вам где-то.

87
ответ дан Vlad Bezden 22 August 2018 в 09:40
поделиться
  • 1
    Есть ли способ сделать это с другими типами файлов: pdf, docx и т. Д., А вместо изображения - показать значок? Для моих целей я хочу сохранить файлы на странице, прежде чем отправлять их, давая пользователю возможность добавить комментарий для загрузки с ним, как сообщение с текстом. – user1040975 3 April 2015 в 18:21
  • 2
    Мне нужно только разместить содержимое «tmppath»? в адресной строке браузера? Я пробовал, и он не работает. – MacGruber 14 October 2015 в 14:02
  • 3
    @GangsarSwaPurba К сожалению, он не работает в IE9 - , см. URL.createObjectURL () . – naXa 8 February 2016 в 13:23
  • 4
    @naXa хорошо, я отредактирую свой комментарий выше. uw, я не могу отредактировать свой комментарий – Gangsar Swa Purba 18 February 2016 в 09:21
  • 5
    В третьей строке вы должны использовать переменную tmppath вместо URL.createObjectURL (event.target.files [0]), это более оптимизировано. – Wessam El Mahdy 8 October 2017 в 03:42
Другие вопросы по тегам:

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