2010-08-27 34 views
102

Tôi cố gắng để mở tập tin vớiLàm thế nào để mở một tệp đĩa cục bộ bằng Javascript?

window.open("file:///D:/Hello.txt"); 

Trình duyệt không cho phép mở một tập tin địa phương theo cách này, có lẽ vì lý do an ninh. Tôi muốn sử dụng dữ liệu của tập tin ở phía máy khách. Làm thế nào tôi có thể đọc tập tin địa phương trong Javascript?

Trả lời

-1

Bạn không thể. Các trình duyệt mới như Firefox, Safari, vv chặn giao thức 'tệp'. Nó sẽ chỉ hoạt động trên các trình duyệt cũ.

Bạn sẽ phải tải lên các tệp mình muốn.

54

HTML5 fileReader facility không cho phép bạn xử lý tệp cục bộ, nhưng PHẢI được chọn bởi người dùng, bạn không thể đi rễ về đĩa người dùng đang tìm tệp.

Tôi hiện đang sử dụng tính năng này với các phiên bản phát triển của Chrome (6.x). Tôi không biết những gì các trình duyệt khác hỗ trợ nó.

+3

Phải, nó bây giờ có thể với HTML5. [Xem tại đây] (http://www.html5rocks.com/en/tutorials/file/dndfiles/) –

+0

Sử dụng HTML5, có thể chọn tệp để mở, sửa đổi tệp và sau đó lưu thay đổi vào tệp ? –

+0

Việc quét nhanh thông số được tham chiếu (cập nhật lần cuối 2012-07-12) cho thấy không có phương tiện để ghi tệp, chỉ đọc. – HBP

0

Javascript thường không thể truy cập tệp cục bộ trong trình duyệt mới nhưng đối tượng XMLHttpRequest có thể được sử dụng để đọc tệp. Vì vậy, nó thực sự là Ajax (và không phải Javascript) đang đọc tệp.

Nếu bạn muốn đọc các tập tin abc.txt, bạn có thể viết các mã như:

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

Bây giờ txt chứa nội dung của file abc.txt.

+52

Ajax là JavaScript. –

+3

@TheMuffinMan và XML. (Asynchronus Javascript và XML) – thecoder16

+5

Câu trả lời này không liên quan như op được hỏi về cách mở tệp nằm ở phía máy khách, không phải tệp nằm trên máy chủ. –

-2

Phương thức yêu cầu xmlhttp không hợp lệ đối với các tệp trên đĩa cục bộ vì bảo mật trình duyệt không cho phép chúng tôi làm như vậy. Nhưng chúng tôi có thể ghi đè bảo mật trình duyệt bằng cách tạo phím tắt-> nhấp chuột phải-> thuộc tính Trong mục tiêu " ... trình duyệt location path.exe "append --allow-file-access-from-files.Điều này được thử nghiệm trên chrome, tuy nhiên cần lưu ý rằng tất cả các cửa sổ trình duyệt phải được đóng và mã sẽ được chạy từ trình duyệt đã mở thông qua phím tắt này.

163

Dưới đây là một ví dụ sử dụng 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>


Specs

http://dev.w3.org/2006/webapi/FileAPI/

trình duyệt tương thích

01.235.
  • IE 10+
  • Firefox 3.6+
  • Chrome 13 +
  • Safari 6.1+

http://caniuse.com/#feat=fileapi

+0

Làm cách nào để lấy tên tệp? – Hydro

+2

@SamusHands https://developer.mozilla.org/en-US/docs/Web/API/File/name –

+0

Cảm ơn, tôi đã thử và nó hoạt động ('fileVariable.name'). – Hydro

Các vấn đề liên quan