HTML'deki bir dosya girişine değer nasıl ayarlanır?


Yanıtlar:


525

Güvenlik nedeniyle yapamazsınız.

Hayal etmek:

<form name="foo" method="post" enctype="multipart/form-data">
    <input type="file" value="c:/passwords.txt">
</form>
<script>document.foo.submit();</script>

Ziyaret ettiğiniz web sitelerinin bunu yapabilmesini istemiyorsunuz, değil mi? =)


Temizleyebilir misin? Her yeniden ziyaret ettiğimde dosya adının hatırlanması beni rahatsız ediyor. Pelase bkz. Stackoverflow.com/questions/41807471/…
Mawg diyor Monica

1
Güvenlik sorununu anlıyorum, ancak tarayıcı tehlikeli bir yerel dosya yolu ile bir dataUrl gibi daha zararsız bir şey arasında ayrım yapamaz mı? Belki bu bir rüya gibi.
17'de cowlinator

5
Sürükle ve bırak işlevine ne dersiniz, o dosyayı giriş alanına ayarlamanın bir yolu yok mu?
Vedmant

1
@Vedmant Evet, dosya öğesinin değerini diğer öğelerde sürükle / bırak olayıyla ayarlayabilirsiniz. Bkz. Dosya giriş değeri programlı olarak nasıl ayarlanır (ör: dosyaları sürüklerken)?
Samuel Liew

129

Yapamazsın.

Bir dosya girişinin değerini ayarlamanın tek yolu kullanıcı tarafından bir dosya seçmektir.

Bu güvenlik nedeniyle yapılır. Aksi takdirde, istemcinin bilgisayarından belirli bir dosyayı otomatik olarak yükleyen bir JavaScript oluşturabilirsiniz.


51

Sorunuza bir yanıt değil (diğerlerinin yanıtladığı), ancak yüklenen bir dosya alanının düzenleme işlevine sahip olmak istiyorsanız, muhtemelen yapmak istediğiniz şey şudur:

  • yalnızca dosya adını veya URL'yi, indirmek için tıklanabilir bir bağlantıyı veya bir resim ise bu alanın mevcut değerini göster: sadece göster, muhtemelen küçük resim olarak
  • <input>etiketi yeni bir dosya yüklemek için
  • işaretlendiğinde şu anda yüklenen dosyayı silen bir onay kutusu. 'boş' bir dosya yüklemenin bir yolu olmadığını unutmayın, bu nedenle alanın değerini temizlemek için böyle bir şeye ihtiyacınız vardır

1
Sanırım ihtiyacım olan şey bu. Ben ise düzenleme ürün bilgisi istiyorum ben ayarlamalısınız nasıl (değil ürün imajını değiştirmek istiyorsun) <input type="file" />ürün resmini mevcut mu? Bir <img />etikette mevcut resmi gösterebilirim ama gönderirken dosya geçmiyor.
Partho63

37

Yapamazsın. Ve bu bir güvenlik önlemi. Birisinin bazı hassas veri dosyalarına dosya giriş değerini ayarlayan bir JS yazıp yazmadığını düşünün.


10

Buradaki herkesin belirttiği gibi: Bir dosyayı JavaScript ile otomatik olarak yükleyemezsiniz.

ANCAK! Kodunuzda göndermek istediğiniz bilgilere erişiminiz varsa (ör. Passwords.txt değil), bunu bir blob tipi olarak yükleyebilir ve daha sonra dosya olarak değerlendirebilirsiniz.

Sunucunun neyi göreceğini, değerini ayarlayan birinden ayırt edilemez <input type="file" />. Hile, sonuçta, sunucu ile yeni bir XMLHttpRequest () başlatmaktır ...

function uploadFile (data) {
        // define data and connections
    var blob = new Blob([JSON.stringify(data)]);
    var url = URL.createObjectURL(blob);
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'myForm.php', true);

        // define new form
    var formData = new FormData();
    formData.append('someUploadIdentifier', blob, 'someFileName.json');

        // action after uploading happens
    xhr.onload = function(e) {
        console.log("File uploading completed!");
    };

        // do the uploading
    console.log("File uploading started!");
    xhr.send(formData);
}

    // This data/text below is local to the JS script, so we are allowed to send it!
uploadFile({'hello!':'how are you?'});

Peki, bunu ne için kullanabilirsiniz? HTML5 tuval öğelerini jpg olarak yüklemek için kullanıyorum . Bu, kullanıcıyı file inputyalnızca yeniden boyutlandırıldığı, değiştirildiği vb. Yerel, önbelleğe alınmış görüntüyü seçmek için bir öğeyi açma zorunluluğundan kurtarır . Ancak herhangi bir dosya türü için çalışması gerekir .


1

1) Bir dosya girişindeki varsayılan değer sorunu "güvenlik nedeniyle yapılmadı" DEĞİL, ancak tarayıcılar "bunu iyi bir nedenden ötürü uygulayamadı": bu derin rapora bakın

2) Basit bir çözüm, burada olduğu gibi dosya girişinin üstünde bir metin girişi kullanmak olabilir . Tabii ki, dosyayı göndermek için şimdi metin girişindeki değeri kullanarak dosyayı göndermek için bazı kodlara ihtiyacınız var.

Benim durumumda, HTA uygulaması yapmak, bu bir sorun değil, formu hiç kullanmıyorum.


-4

HTML olarak tanımlayın:

<input type="hidden" name="image" id="image"/>

JS'de:

ajax.jsonRpc("/consulta/dni", 'call', {'document_number': document_number})
    .then(function (data) {
        if (data.error){
            ...;
        }
        else {
            $('#image').val(data.image);
        }
    })

Sonra:

<input type="hidden" name="image" id="image" value="/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8U..."/>
<button type="submit">Submit</button>

-8

Aslında yapabiliriz. FormToMultipartPostData Library'yi kullanarak c # içindeki webbrowser denetimini kullanarak varsayılan dosya değerini ayarlayabiliriz. Bu Kütüphaneyi indirip projemize dahil etmeliyiz. Webbrowser, kullanıcının Web sayfalarında form içinde gezinmesini sağlar. Web sayfası yüklendikten sonra, webBrowser1_DocumentCompleted içindeki komut dosyası yürütülür. Yani,

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
    {
       FormToMultipartPostData postData = 
            new FormToMultipartPostData(webBrowser1, form);
        postData.SetFile("fileField", @"C:\windows\win.ini");
        postData.Submit();
    }

İndirme ve tam referans için aşağıdaki bağlantıya bakın.

https://www.codeproject.com/Articles/28917/Setting-a-file-to-upload-inside-the-WebBrowser-com


3
Bu hangi dil için? Javascript değil.
John
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.