Yanıtlar:
İşte bir örnek FileReader:
function readSingleFile(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
displayContents(contents);
};
reader.readAsText(file);
}
function displayContents(contents) {
var element = document.getElementById('file-content');
element.textContent = contents;
}
document.getElementById('file-input')
.addEventListener('change', readSingleFile, false);
<input type="file" id="file-input" />
<h3>Contents of the file:</h3>
<pre id="file-content"></pre>
http://dev.w3.org/2006/webapi/FileAPI/
nullHer onClickolayın giriş değerinin ayarlanması hile yapmalıdır, bkz .: stackoverflow.com/a/12102992/63011
FileReader, ancak displayContentsyukarıdaki bir yorumdur : innerHTMLgüvenilmeyen içerikle böyle bir ayarın bir güvenlik açığı olabileceğini unutmayın . (Bunu kendiniz görmek için bad.txtbenzer bir şey oluşturun <img src="/nonexistent" onerror="alert(1);">ve uyarının yürütüldüğünü görün - daha kötü niyetli bir kod olabilir.)
innerHTMLile textContent. Yorumun için teşekkürler.
DOMContentLoadedEtkinliği bunun için de kullanabilirsiniz .
HTML5 FileReader tesis yerel dosyaları işlemek için izin vermez, ancak bu, dosyaların arayan kullanıcıların diske hakkında köklenmeyi gidemez kullanıcı tarafından seçilmek zorundadır.
Şu anda bunu Chrome'un (6.x) geliştirme sürümleriyle kullanıyorum. Diğer tarayıcıların neyi desteklediğini bilmiyorum.
Hayatım olmadığı ve bu 4 itibar puanını istediğim için kodlamada gerçekten iyi olan insanlara (cevapları oylayarak) sevgimi gösterebilirim Paolo Moretti'nin koduna adaptasyonumu paylaştım . Sadece openFile(ilk parametre olarak dosya içeriğiyle yürütülecek işlevi kullanın) .
function dispFile(contents) {
document.getElementById('contents').innerHTML=contents
}
function clickElem(elem) {
// Thx user1601638 on Stack Overflow (6/6/2018 - /programming/13405129/javascript-create-and-save-file )
var eventMouse = document.createEvent("MouseEvents")
eventMouse.initMouseEvent("click", true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
elem.dispatchEvent(eventMouse)
}
function openFile(func) {
readFile = function(e) {
var file = e.target.files[0];
if (!file) {
return;
}
var reader = new FileReader();
reader.onload = function(e) {
var contents = e.target.result;
fileInput.func(contents)
document.body.removeChild(fileInput)
}
reader.readAsText(file)
}
fileInput = document.createElement("input")
fileInput.type='file'
fileInput.style.display='none'
fileInput.onchange=readFile
fileInput.func=func
document.body.appendChild(fileInput)
clickElem(fileInput)
}
Click the button then choose a file to see its contents displayed below.
<button onclick="openFile(dispFile)">Open a file</button>
<pre id="contents"></pre>
clickElem()yerine, sadece arayabileceğinizi unutmayın fileInput.click(). (en azından Chrome'un en son sürümünde)
Deneyin
function readFile(file) {
return new Promise((resolve, reject) => {
let fr = new FileReader();
fr.onload = x=> resolve(fr.result);
fr.readAsText(file);
})}
ancak kullanıcının dosyayı seçmek için işlem yapması gerekir
Xmlhttp istek yöntemi yerel diskteki dosyalar için geçerli değil çünkü tarayıcı güvenliği bunu yapmamıza izin vermiyor.Ancak tarayıcı kısayol-> sağ tıklama-> Hedefte özellikler "... location path.exe "append --allow-file-access-from-files.Bu, krom üzerinde test edilmiştir, ancak tüm tarayıcı pencerelerinin kapatılması ve kodun bu kısayol ile açılan tarayıcıdan çalıştırılması gerektiğine dikkat edilmelidir.
Javascript genellikle yeni tarayıcılardaki yerel dosyalara erişemez, ancak XMLHttpRequest nesnesi dosyaları okumak için kullanılabilir. Yani aslında dosyayı okuyan Ajax (Javascript değil).
Dosyayı okumak abc.txtistiyorsanız, kodu şu şekilde yazabilirsiniz:
var txt = '';
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function(){
if(xmlhttp.status == 200 && xmlhttp.readyState == 4){
txt = xmlhttp.responseText;
}
};
xmlhttp.open("GET","abc.txt",true);
xmlhttp.send();
Şimdi txtabc.txt dosyasının içeriğini içermektedir.