2010-11-24 25 views
8

Web uygulamasında düz metin dosyaları için bir içe aktarma komut dosyası hazırlıyorum. aşağıdaki gibiJavaScript'in FileReader arabirimini kullanırken bir dosyanın içerik türünü algılama

Benim script:

function dataImport(files) { 
    confirm("Are you sure you want to import the selected file? This will overwrite any data that is currently saved in the application workspace."); 
    for (i = 0; i < files.length; i++) { 
     file = files[i] 
     console.log(file) 
     var reader = new FileReader() 
     ret = [] 
     reader.onload = function(e) { 
      window.localStorage.setItem("ApplicationData", e.target.result); 
     } 
     reader.onerror = function(stuff) { 
      console.log("error", stuff) 
      console.log (stuff.getMessage()) 
     } 
     reader.readAsText(file) 
    } 
} 

Aslında bunun bir modifikasyon this question üzerine yöneltilen bu. Bununla birlikte, şu anda kullanıcı teknik olarak herhangi bir dosyayı içe aktarmayı deneyebilir. Düz metin dosyaları için tasarlandığından farklı bir dosya türü içe aktarılırsa sorunlar ortaya çıkabilir.

Konsolda, tarayıcının içe aktarılan dosyanın içerik türünü algıladığını fark ettim. İşte bir örnek.

fileName: "ideas.txt" 
fileSize: 377 
name: "ideas.txt" 
size: 377 
type: "text/plain" 
webkitRelativePath: "" 

mümkün, daha sonra, komut dosyası content-type algılar bir tartışma kurmak ve belirtilen uygun içerik türlerinin bir dizi biri değilse etmek senaryosu var mı ithal etmek reddediyor musunuz?

Herhangi bir öneri için şimdiden teşekkür ederiz.

+0

bence 'content-type algıla' tarafından u dosyanın uzantısından çıkarım demek .. uzantısı –

+0

çıkarım bunu yapmanın bir yolu olurdu ama elimden umuyordum kaş ne olursa olsun erişim bir dosya, örneğin, "text/plain" veya "text/x-tex" veya "image/jpeg" vb. –

cevap

14
if (file.type.match('text/plain')) { 
    // file type is text/plain 
} else { 
    // file type is not text/plain 
} 

String.match bir RegEx, yani dosya metnin her türlü olup olmadığını kontrol etmek isteyeyim, sen bunu yapabilir: İçerik Türü ile okunabilir

if (file.type.match('text.*')) { 
    // file type starts with text 
} else { 
    // file type does not start with text 
} 
10

aşağıdaki kodu:

// Note: File is a file object than can be read by the HTML5 FileReader API 
var reader = new FileReader(); 

reader.onload = function(event) { 
    var dataURL = event.target.result; 
    var mimeType = dataURL.split(",")[0].split(":")[1].split(";")[0]; 
    alert(mimeType); 
}; 

reader.readAsDataURL(file); 
+0

başka bir seçenek (daha basit) sadece kontrol etmektir: dataURL.split (",") [0] .split (":") [1] .split (";") [0] .indexOf ([MIME türünüz] > = 0 – Alberto

İlgili konular