Javascript, jquery-ajax kullanarak <input type = 'file'> değiştirildiğinde seçilen dosyanın tam yolunu nasıl alabilirim?


240

Kullanarak dosyayı seçerken tam dosya yolu nasıl alınır <input type=‘file’>

<input type="file" id="fileUpload">
<script type="text/javascript">
function getFilePath(){
     $('input[type=file]').change(function () {
         var filePath=$('#fileUpload').val(); 
     });
}
</script>

ancak filePath var, only nameseçilen dosyayı değil, seçilen dosyayı içerir full path.
Net olarak aradım, ancak güvenlik nedenleriyle tarayıcıların (FF, krom) sadece dosya adını verdiği anlaşılıyor.
Seçilen dosyanın tam yolunu almanın başka bir yolu var mı?




@nauphal yorum için teşekkürler ama seçilen dosyanın tam yolunu almanın başka bir yolu var mı?
Yogesh Pingle

1
Sunucudaki bir dosyanın yolunu almak istediğiniz durumdaysanız (örneğin, sunucuda çalıştırılacak bir komut satırı yardımcı programına web arabirimi oluşturmak) her zaman göreli yolu oluşturabilir, gönderebilirsiniz olarak seçin ve kullanıcının onu seçmesine ve ardından sunucunun dosyayı işlemesini sağlamak için bir ağaç widget'ı kullanın veya ilerde yazın.
dardenfall

Yanıtlar:


164

Güvenlik nedeniyle tarayıcılar buna izin vermez, yani tarayıcıdaki JavaScript'in Dosya Sistemine erişimi yoktur, ancak HTML5 Dosya API'sını kullanarak yalnızca Firefox bir mozFullPathözellik sağlar, ancak değeri almaya çalışırsanız boş bir dize döndürür:

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

http://jsfiddle.net/SCK5A/

Yani zamanını boşa harcama.

edit: Bir dosyayı okumak için dosyanın yoluna ihtiyacınız varsa bunun yerine FileReader API'sini kullanabilirsiniz . İşte SO ile ilgili bir soru: Yüklenmeden önce bir görüntüyü önizleyin.


1
Aynı sorunu bana yardımcı olduğu için bu bağlantıya bakın .
Amir Tugi

... Bağlantılı sorunun başlığı: Görüntüyü yüklenmeden önce önizleyin .
undefined

Ve yine de sunucuya gönderme yolunun URL'sini aldım
Amir Tugi

1
@AmirTugi Bu çözüm bir dosyayı okur. Kullanıcının dosya sistemindeki dosyanın yolu ile ilgisi yoktur.
undefined

Peki bu web sitesi nasıl yapabilir?
SaidbakR

102

Bunu dene:

Size doğru yolu değil geçici bir yol verecektir, bu jsfiddle örneğinde olduğu gibi seçilen görüntüleri göstermek istiyorsanız bu komut dosyasını kullanabilirsiniz (Diğer dosyaların yanı sıra görüntüleri seçerek de deneyin): -

JSFIDDLE

İşte kod: -

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>");
});

Onun tam olarak ne aradığını değil, ama bir yerde size yardımcı olabilir.


Bunu diğer dosya türleriyle yapmanın bir yolu var mı: pdf, docx, vb. Ve görüntü yerine bir Simge gösterin? Kullanımlarım için, dosyaları göndermeden önce sayfada saklamak istiyorum, kullanıcıya kullanıcıya bir metin içeren bir mesaj gibi yüklemeye yorum ekleme şansı veriyor.
user1040975

Yalnızca "tmppath" içeriğini tarayıcı adres çubuğuna koymam gerekir mi? Denedim ve işe yaramıyor.
MacGruber

@GangsarSwaPurba Ne yazık ki IE9'da çalışmıyor - bkz. URL.createObjectURL () .
naXa

@ naXa iyi, yukarıdaki yorumumu düzenleyeceğim. uw, unfurteyse yorumumu düzenleyemiyorum
Gangsar Swapurba

2
3. satırda URL.createObjectURL (event.target.files [0]) yerine tmppath değişkeni kullanmalısınız, bu daha optimize edilmiştir.
Wessam El Mahdy

17

Bunu yapamazsınız - güvenlik endişeleri nedeniyle tarayıcı buna izin vermez.

İnput type = file nesnesi kullanılarak bir dosya seçildiğinde, value özelliğinin değeri, Web sayfasını görüntülemek için kullanılan güvenlik bölgesi için "Dosyaları sunucuya yüklerken yerel dizin yolunu ekle" güvenlik ayarının değerine bağlıdır. giriş nesnesini içerir.

Seçilen dosyanın tam dosya adı yalnızca bu ayar etkinleştirildiğinde döndürülür. Ayar devre dışı bırakıldığında, Internet Explorer 8, uygunsuz bilgilerin açığa çıkmasını önlemek için yerel sürücü ve dizin yolunu C: \ fakepath \ dizesiyle değiştirir.

Ve diğeri

Bunu );change event işlevinin sonunda kaçırdınız .

Ayrıca değişiklik olayı için işlev oluşturmayın, bunun yerine aşağıdaki gibi kullanın,

<script type="text/javascript">

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

</script>

19
Kodunu denedim ama bana yanlış yol veriyor. Benim dosya içindedir Ddizine ama değer geliyorC:\fakepath\test.xls
Rahul Munjal

3
C: \ fakepath \ fileName.xls ... bunu nasıl çözeceğini bilen var mı?
André Dos Santos

14

Yapamazsın. Güvenlik, istemci bilgisayarın dosyalama sistemi hakkında bir şey bildiğiniz için sizi durdurur - hatta bir tane bile olmayabilir! MAC, PC, Tablet veya internet özellikli bir buzdolabı olabilir - bilmiyorsunuz, bilmiyorsunuz ve bilmeyeceksiniz. Tam yola sahip olmanıza izin vermek, özellikle istemci bir ağ sürücüsü ise, istemci hakkında bazı bilgiler verebilir.

Aslında belirli koşullar altında alabilirsiniz, ancak bir ActiveX denetimi gerektirir ve koşulların% 99,99'unda çalışmaz.

Dosyayı yine de orijinal konuma geri yüklemek için kullanamazsınız (indirmelerin nerede saklandığı veya hatta saklandıklarında kesinlikle hiçbir kontrole sahip olmadığınız için), bu yüzden pratikte zaten çok fazla kullanım değildir.


11

Bunu mu demek istediniz?

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

4
bu dosyaya yol vermez. Neden bu kadar çok kez oy verdiniz?
FlowUI. SimpleUITesting.com

7

Yüklenen dosya için çalışan bir yerel URL almak için aşağıdaki kodu kullanabilirsiniz:

<script type="text/javascript">    
    var path = (window.URL || window.webkitURL).createObjectURL(file);
    console.log('path', path);
</script>


1

Bir klasörün tamamını yüklemek sizin için bir seçenekse

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

değişiklik etkinliği şunları içerecektir:

.target.files[...].webkitRelativePath: "FOLDER/FILE.ext"


-1

dosya elemanı ve dizi çağrısı filesihtiyacınız olan tüm gerekli şeyleri içerir

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);

2
Yüklenen dosyanın tam yolunu sağlamaz.
Sergiu Mare

-3

Seçilen dosyanın tam yolunu yalnızca IE11 ve MS Edge ile karşıya yükleyebilirsiniz.

var fullPath = Request.Form.Files["myFile"].FileName;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.