<input type="file" id="file-id" name="file_name" onchange="theimage();">
To jest mój przycisk przesyłania.
<input type="text" name="file_path" id="file-path">
To pole tekstowe, w którym muszę pokazać pełną ścieżkę do pliku.
function theimage(){
var filename = document.getElementById('file-id').value;
document.getElementById('file-path').value = filename;
alert(filename);
}
To jest JavaScript, który rozwiązuje mój problem. Ale w wartości alarmowej daje mi
C:\fakepath\test.csv
a Mozilla daje mi:
test.csv
Ale chcę lokalną pełną ścieżkę pliku . Jak rozwiązać ten problem?
Jeśli wynika to z problemów związanych z bezpieczeństwem przeglądarki, jaki powinien być alternatywny sposób?
javascript
html
dom
file-upload
e_maxm
źródło
źródło
browser security issue
~ jeśli jest zaimplementowany w przeglądarce (słusznie), to jest bardzo mało prawdopodobne, że można go obejśćC:\fakepath
, więc teraz wszyscy znają moją strukturę katalogów.Odpowiedzi:
Niektóre przeglądarki mają funkcję zabezpieczeń, która uniemożliwia JavaScriptowi rozpoznanie pełnej lokalnej ścieżki do pliku. Ma to sens - jako klient nie chcesz, aby serwer znał system plików komputera lokalnego. Byłoby miło, gdyby to zrobiły wszystkie przeglądarki.
źródło
c:\users\myname\desktop
lub/Users/myname/Desktop/
lub cokolwiek). To nie jest coś, o czym serwer sieciowy ma jakąkolwiek wiedzę biznesową.Posługiwać się
zamiast
źródło
Używam obiektu FileReader na
onchange
zdarzeniu wejściowym dla twojego typu pliku wejściowego! W tym przykładzie użyto funkcji readAsDataURL iz tego powodu powinieneś mieć tag. Obiekt FileReader ma również readAsBinaryString, aby uzyskać dane binarne, które można później wykorzystać do utworzenia tego samego pliku na serwerzePrzykład:
źródło
Jeśli przejdziesz do Internet Explorer, Narzędzia, Opcje internetowe, Zabezpieczenia, Niestandardowe, znajdź „Uwzględnij ścieżkę katalogu lokalnego podczas przesyłania plików na serwer” (jest to całkiem spory sposób) i kliknij „Włącz”. To zadziała
źródło
Cieszę się, że przeglądarki chcą nas uratować przed natrętnymi skryptami i tym podobnymi. Nie jestem zadowolony z IE umieszczającego w przeglądarce coś, co sprawia, że prosta poprawka stylu wygląda jak atak hakera!
Użyłem <span> do reprezentowania wejścia pliku, dzięki czemu mogłem zastosować odpowiednią stylizację do <div> zamiast <input> (jeszcze raz, z powodu IE). Teraz z powodu tego IE chce pokazać Użytkownikowi ścieżkę o wartości, która gwarantuje, że będzie się pilnować i będzie co najmniej pełna obaw (jeśli nie całkowicie ich odstraszy?!) ... WIĘCEJ IE-CRAP!
W każdym razie, dzięki tym, którzy opublikowali wyjaśnienie tutaj: Zabezpieczenia przeglądarki IE: Dodanie „fakepath” do ścieżki pliku na wejściu [type = „file”] , stworzyłem drobny program naprawczy ...
Poniższy kod ma dwie rzeczy - naprawia błąd lte IE8, w którym zdarzenie onChange nie jest uruchamiane do momentu przesłania onBlur pola przesyłania i aktualizuje element oczyszczoną ścieżką pliku, który nie odstraszy użytkownika.
źródło
Natrafiłem na ten sam problem. W IE8 można to obejść, tworząc ukryte dane wejściowe po kontroli danych wejściowych pliku. Wypełnij to wartością poprzedniego rodzeństwa. W IE9 zostało to również naprawione.
Moim powodem, aby poznać pełną ścieżkę, było utworzenie podglądu obrazu javascript przed przesłaniem. Teraz muszę załadować plik, aby utworzyć podgląd wybranego obrazu.
źródło
Jeśli naprawdę musisz przesłać pełną ścieżkę do pliku umieszczonego na górze, prawdopodobnie będziesz musiał użyć czegoś takiego jak podpisany aplet Java, ponieważ nie ma sposobu na uzyskanie tych informacji, jeśli przeglądarka ich nie wyśle.
źródło
wygląda na to, że nie możesz znaleźć pełnej ścieżki w twoim localhost przez js, ale możesz ukryć ścieżkę fakepath, aby po prostu wyświetlić nazwę pliku. Użyj jQuery, aby uzyskać nazwę pliku wejściowego wybranego pliku bez ścieżki
źródło
Użyj czytników plików:
źródło
Hy tam, w moim przypadku używam środowiska programistycznego asp.net, więc chciałem przesłać te dane w żądaniu asynchronus ajax, w [webMethod] nie można złapać programu do przesyłania plików, ponieważ nie jest to element statyczny, więc musiałem zrób takie rozwiązanie, ustalając ścieżkę, niż przekonwertuj poszukiwany obraz na bajty, aby zapisać go w DB.
Oto moja funkcja javascript, mam nadzieję, że pomoże ci:
tutaj tylko do testowania:
źródło
Uzupełnienie odpowiedzi Sardesh Sharma:
Aby uzyskać pełną ścieżkę.
źródło
undefined
mi się w FireFox 75.0. Czypath
faktycznie istnieje? Czy masz jakieś odniesienia do dokumentacji na ten temat?