Şunu dosyaları
OpenOffice dosyaları görüntülemek istiyorum .odt ve .istemci tarafında odp bir web tarayıcısı kullanarak.
Bu dosyalar sıkıştırılmış dosyalardır. Ajax kullanarak, sunucudan bu dosyaları alabilirim ama bunlar sıkıştırılmış dosyalardır. Bunları halletmek için JavaScript, inflate.js, http://www.onicos.com/staff/iz/amuse/javascript/expert/inflate.txt, ancak başarılı olamadı kullanarak denedim kullanıyorum.
Bunu nasıl yapabilirim?
CEVAP
Javascript bir unzipper yazdım. Çalışıyor.
Andy G.P. Na's binary file reader some RFC1951 inflate logic from notmasteryet dayanır. ZipFile sınıfı ekledim.
örnek çalışma:
http://cheeso.members.winisp.net/Unzip-Example.htm (ölü link)
Kaynak:
http://cheeso.members.winisp.net/srcview.aspx?dir=js-unzip (ölü link)
NB: bağlantılar öldü; yeni bir ev sahibi yakında bulacağım.
Kaynağında bulunan gösteri sayfası, ve 3 farklı komut, zipfile sınıfı için bir sınıf, ve bir ikili dosya için bir şişirmek okuyucu sınıfı için bir zipfile.htm . Demo ayrıca jQuery ve jQuery UI bağlıdır. Eğer sadece js-zip.zip dosyayı indirip, gerekli kaynağı var.
Uygulama kodu Javascript: böyle görünüyor işte
// In my demo, this gets attached to a click event.
// it instantiates a ZipFile, and provides a callback that is
// invoked when the zip is read. This can take a few seconds on a
// large zip file, so it's asynchronous.
var readFile = function(){
$("#status").html("<br/>");
var url= $("#urlToLoad").val();
var doneReading = function(zip){
extractEntries(zip);
};
var zipFile = new ZipFile(url, doneReading);
};
// this function extracts the entries from an instantiated zip
function extractEntries(zip){
$('#report').accordion('destroy');
// clear
$("#report").html('');
var extractCb = function(id) {
// this callback is invoked with the entry name, and entry text
// in my demo, the text is just injected into an accordion panel.
return (function(entryName, entryText){
var content = entryText.replace(new RegExp( "\\n", "g" ), "<br/>");
$("#" id).html(content);
$("#status").append("extract cb, entry(" entryName ") id(" id ")<br/>");
$('#report').accordion('destroy');
$('#report').accordion({collapsible:true, active:false});
});
}
// for each entry in the zip, extract it.
for (var i=0; i<zip.entries.length; i ) {
var entry = zip.entries[i];
var entryInfo = "<h4><a>" entry.name "</a></h4>\n<div>";
// contrive an id for the entry, make it unique
var randomId = "id-" Math.floor((Math.random() * 1000000000));
entryInfo = "<span class='inputDiv'><h4>Content:</h4><span id='" randomId
"'></span></span></div>\n";
// insert the info for one entry as the last child within the report div
$("#report").append(entryInfo);
// extract asynchronously
entry.extract(extractCb(randomId));
}
}
Birkaç adım demo çalışır: readFile
fn bir tıklama ile tetiklenir, ve zip dosyasını okur ZipFile bir nesne oluşturur. Bir zaman uyumsuz geri arama için zaman okumak tamamlar (genellikle olur, kısa bir süre önce bir an için kabul edilebilir ölçülerde fermuarlar) - bu demo geri düzenlenen doneReading yerel değişken, hangi sadece arama extractEntries
,
körü körüne verilen zip dosyasının tüm içeriğini unzips. Gerçek bir uygulama muhtemelen ayıklamak için girişleri (kullanıcı seçmek için izin, ya da bir veya daha fazla girdi seçin program aracılığıyla, vs.) bazı seçmelisiniz.
extractEntries
fn tüm girdileri üzerinde dolaşır ve her biri üzerinde extract()
bir geri arama çağırır. Bir giriş açma zamanı, belki 1 veya daha fazla asynchrony uygun olduğu anlamına gelir zipfile, her giriş için alır. Özü geri basitçe sayfasında jQuery akordiyon için çıkarılan içerik ekler. Eğer içeriği ikili ise, bu (yağ) olarak biçimlendirilmiş alır.
Çalışıyor ama programı biraz sınırlı olduğunu düşünüyorum.
Bir diğeri için: akıtma yapmaz. Temelde belleğe zipfile tüm içeriği slurps. Bir "gerçek" bir zip dosyası sadece meta (64 giriş başına bayt say) okuma ve istenen diğer veri okuma sıkıştırması daha sonra bir programlama ortamı. Javascript, bildiğim kadarıyla, bu nedenle tek seçenek belleğe tüm zip okuyan ve rastgele erişim yapmak gibi bir IO yapmanın bir yolu yok. Bu büyük zıp dosyaları için sistem belleği mantıksız taleplerde anlamına gelir. Çok küçük bir zip dosyası için bir sorun değil.
Ayrıca: yok kolu "genel durum" zip dosyası bir sürü vardır zıp seçenek olduğunu bilmiyordum rahatsız uygular unzipper - POSTA şifreleme, Yedekleme şifreleme, zip64,
EDİT- JS ayıklayın kütüphane ve demo güncelledi. Şimdi ikili dosyaları, metin ek olarak geliyor. Daha esnek ve daha genel yaptım - şimdi kodlama metin dosyaları okurken belirtebilirsiniz. Ayrıca demo genişletilir - diğer şeyler arasında tarayıcıda XLSX dosyası, şunu gösterir.
Sınırlı yarar ve ilgi çekici olduğunu düşünüyorum uzun süre çalışır. Node.js içinde işe yarar sanırım.
nelerdir .dosyaları Bootstrap 3.1 için...
Nasıl Gıt kaynak kontrol sürekli değiş...
Başlığında değişken tanımlama dosyalar...
belirli bir dizin altındaki tüm java d...
Hazırlama Silinmiş dosyaları...