Storage API'leri

Uygulama geliştirmenin neredeyse her aşamasında veri gönderip almayla ilgili birtakım unsurlar bulunur. Başlangıç yardımcı olacak bir MVC çerçevesi kullanmanız gerekir. Bunun için uygulamanızı veriler, uygulamanın bu verilere ilişkin görünümünden tamamen ayrıdır (bkz. MVC Mimarisi).

Ayrıca, uygulamanız çevrimdışıyken verilerin nasıl işleneceğini düşünmeniz gerekir (Önce Çevrimdışı bölümüne bakın). Bu dokümanda, verilerin yerel olarak gönderilmesi, alınması ve kaydedilmesine ilişkin depolama seçenekleri kısaca açıklanmaktadır; "the" Dokümanın geri kalanında, Chrome'un Dosya Sistemi ve Sync Dosya Sistemi API'lerinin nasıl kullanılacağı gösterilmektedir (ayrıca bkz. fileSystem API ve syncFileSystem API).

Depolama seçenekleri

Paket uygulamalar, veri gönderip almak için birçok farklı mekanizma kullanır. Harici veriler (kaynaklar, İçerik Güvenliği Politikası (İGP) hakkında bilgi sahibi olmanız gerekir. Chrome'a benzer Uzantılar, uzak sunucularla iletişim kurmak için çapraz kaynak XMLHttpRequests öğelerini kullanabilirsiniz. Siz ayrıca, uygulamanızın geri kalanının güvende olması için harici sayfaları da ayırabilir (bkz. Harici web yerleştirme sayfalar) bulabilirsiniz.

Verileri yerel olarak kaydederken, küçük miktarda dize tasarrufu yapmak için Chrome Storage API'yi kullanabilirsiniz verileri ve IndexedDB'yi kullanır. IndexedDB ile JavaScript nesnelerini bir nesne deposunu kullanabilir ve verileri sorgulamak için mağazanın dizinlerini kullanabilirsiniz (daha fazla bilgi edinmek için HTML5 Rock'ın Basit Yapılacaklar Listesi Liste Eğiticisi) tıklayın. İkili veri gibi diğer tüm veri türleri için Dosya Sistemi ve Senkronizasyonu'nu kullanın. Dosya sistemi API'leri.

Chrome'un Dosya Sistemi ve Senkronizasyon Dosya Sistemi API'leri HTML5 Dosya Sistemi API'sini genişletir. Chrome'un Filesystem API, uygulamalar kullanıcının korumalı alana alınmış bir bölümünü oluşturabilir, okuyabilir, gezinebilir ve buraya yazabilir yerel dosya sisteminizi destekler. Örneğin, bir fotoğraf paylaşımı uygulaması, istediğiniz her şeyi okuyup yazmak için Filesystem API'yi kullanabilir. kullanıcının seçtiği fotoğraflardır.

Chrome'un Sync Filesystem API'si ile uygulamalar, kullanıcının Google Drive'ına veri kaydedip senkronize edebilir. müşteriler genelinde kullanılabileceğini unutmayın. Örneğin, bulut destekli bir metin düzenleyici uygulaması, yeni metin dosyalarını kullanıcının Google Drive hesabıyla otomatik olarak senkronize edebilir. kullanıcı metin düzenleyiciyi yeni bir istemcide açtığında, Google Drive bu istemciye yeni metin dosyaları aktarır. metin düzenleyiciyi kullanın.

Chrome Filesystem API'yi kullanma

Dosya sistemi izni ekleniyor

Chrome'un File System API'sini kullanmak için "fileSystem"ı eklemeniz gerekir dışa aktarma izni bulunuyor. Bu nedenle kalıcı verileri saklaması için kullanıcıdan izin alabilirsiniz.

"permissions": [
  "...",
  "fileSystem"
]

Dosya seçmek için kullanıcı seçenekleri

Kullanıcılar, dosyaları her zaman olduğu gibi seçmek ister. En azından, müşteri hizmetleri temsilcisinin dosya düğmesini ve standart dosya seçiciyi içerir. Uygulamanızda dosya işleme yoğun bir şekilde kullanılıyorsa sürükleyip bırakma özelliğini uygulayın (aşağıya bakın ve Yerel HTML5 Sürükle ve Bırak konusuna da bakın).

Bir fileEntry'nin yolunu alma

Kullanıcının seçtiği dosyanın tam yolunu almak için fileEntry, getDisplayPath() işlevini çağırın:

function displayPath(fileEntry) {
  chrome.fileSystem.getDisplayPath(fileEntry, function(path) {
    console.log(path)
  });
}

Sürükleyip bırakma özelliğini uygulama

Sürükleyip bırak seçimini uygulamanız gerekirse, sürükle ve bırak özellikli dosya denetleyicisi (dnd.js) filesystem-access örneği iyi bir başlangıç noktasıdır. Denetleyici bir dosya girişi oluşturur DataTransferItem üzerinde sürükleyip bırakın. Bu örnekte, fileEntry ilk olarak ayarlanmıştır bırakılan öğe.

var dnd = new DnDFileController('body', function(data) {
  var fileEntry = data.items[0].webkitGetAsEntry();
  displayPath(fileEntry);
});

Dosya okuma

Aşağıdaki kod dosyayı açar (salt okunur) ve bir FileReader nesnesi kullanarak metin olarak okur. Eğer dosya yoksa hata oluşur.

var chosenFileEntry = null;

chooseFileButton.addEventListener('click', function(e) {
  chrome.fileSystem.chooseEntry({type: 'openFile'}, function(readOnlyEntry) {

    readOnlyEntry.file(function(file) {
      var reader = new FileReader();

      reader.onerror = errorHandler;
      reader.onloadend = function(e) {
        console.log(e.target.result);
      };

      reader.readAsText(file);
    });
    });
});

Dosya yazma

Dosya yazmak için en yaygın iki kullanım alanı "Kaydet"dir ve "Farklı kaydet"i seçin. Aşağıdaki kod, writableEntry, salt okunur chosenFileEntry öğesinden alıp seçilen dosyayı bu dosyaya yazar.

 chrome.fileSystem.getWritableEntry(chosenFileEntry, function(writableFileEntry) {
    writableFileEntry.createWriter(function(writer) {
      writer.onerror = errorHandler;
      writer.onwriteend = callback;

    chosenFileEntry.file(function(file) {
      writer.write(file);
    });
  }, errorHandler);
});

Aşağıdaki kod "Farklı kaydet" seçeneğiyle yeni bir dosya oluşturur yeni blob'u şuraya yazar: writer.write() yöntemini kullanarak dosya oluşturun.

chrome.fileSystem.chooseEntry({type: 'saveFile'}, function(writableFileEntry) {
    writableFileEntry.createWriter(function(writer) {
      writer.onerror = errorHandler;
      writer.onwriteend = function(e) {
        console.log('write complete');
      };
      writer.write(new Blob(['1234567890'], {type: 'text/plain'}));
    }, errorHandler);
});

Chrome Sync Filesystem API'yi kullanma

Senkronize edilebilir dosya depolama sayesinde döndürülen veri nesneleri, yerel kampanyalarla aynı şekilde kullanılabilir. FileSystem API'daki çevrimdışı dosya sistemleri ancak bunun ek (ve otomatik) senkronizasyonu ile Google Drive'a aktarın.

Senkronizasyon dosyası sistemi izni ekleniyor

Chrome'un Sync Filesystem API'sini kullanmak için "syncFileSystem" öğesini eklemeniz gerekir. için, manifest dosyası biçimindedir. Böylece, kullanıcıdan kalıcı verileri depolama ve senkronize etme izni alabilirsiniz.

"permissions": [
  "...",
  "syncFileSystem"
]

Senkronize edilebilir dosya depolama alanı başlatılıyor

Uygulamanızda senkronize edilebilir dosya depolamayı başlatmak için syncFileSystem.requestFileSystem öğesini çağırmanız yeterlidir. Bu yöntem, Google Drive tarafından desteklenen senkronize edilebilir bir dosya sistemini döndürür. Örneğin:

chrome.syncFileSystem.requestFileSystem(function (fs) {
   // FileSystem API should just work on the returned 'fs'.
   fs.root.getFile('test.txt', {create:true}, getEntryCallback, errorCallback);
});

Dosya senkronizasyon durumu hakkında

Geçerli dosyanın senkronizasyon durumunu almak için syncFileSystem.getFileStatus öğesini kullanın:

chrome.syncFileSystem.getFileStatus(entry, function(status) {...});

Dosya senkronizasyon durumu değerleri şunlardan biri olabilir: 'synced', 'pending' veya 'conflicting'. "Senkronize edildi" dosyanın tamamen senkronize edildiği anlamına gelir; daha önce yapılmamış, beklemede olan yerel Google Drive ile senkronize edildi. Ancak Google Drive tarafında beklemede olan getirilmedi.

"Beklemede" dosyada, henüz Google Drive'a senkronize edilmemiş, bekleyen değişiklikler var demektir. Uygulama: yerel değişiklikler (neredeyse) hemen Google Drive ile senkronize edilir ve syncFileSystem.onFileStatusChanged etkinliği, 'synced' durumuyla tetiklenir (aşağıdakilere bakın: daha fazla ayrıntıyı inceleyebilirsiniz).

Bir dosyanın durumu şu şekilde değiştiğinde, syncFileSystem.onFileStatusChanged tetiklenir. 'conflicting'. "Çakışan" hem yerel depolama alanında hem de depolama alanında Google Drive Bir dosyanın bu durumda olabilmesi için ihtilaf çözümü politikası 'manual' Varsayılan politika 'last_write_win' şeklindedir ve çakışmalar şu şekilde otomatik olarak çözülür: basit bir son-yazma-kazan ilkesi. Sistemin ihtilaf çözümü politikası syncFileSystem.setConflictResolutionPolicy.

Anlaşmazlık çözümleme politikası 'manual' olarak ayarlanırsa ve bir dosya 'conflicting' durumuna neden oluyorsa uygulama, dosyayı yerel çevrimdışı dosya olarak okumaya ve yazmaya devam edebilir, ancak değişiklikler senkronize edilmez ve dosya, çakışma devam edene kadar diğer istemcilerde uzaktan yapılan değişikliklerden ayrı tutulur. çözüme ulaştırıldı. Bir çakışmayı çözmenin en kolay yolu, dosyanın yerel sürümünü silmek veya yeniden adlandırmaktır. Bu işlem, uzak sürümü senkronize etmeye zorlar, çakışan durum giderilir ve onFileStatusChanged etkinlik 'synced' durumuyla tetiklendi.

Senkronize etme durumundaki değişiklikler dinleniyor

Bir dosyanın senkronizasyon durumu değiştiğinde syncFileSystem.onFileStatusChanged etkinliği tetiklenir. Örneğin, bir dosyada bekleyen değişiklikler olduğunu ve "beklemede" olduğunu varsayalım. durumu. Uygulama, durumu senkronize edin. Senkronizasyon hizmeti ve değişikliği Google Drive'a yüklerse, hizmet yeni Google Cloud'u Aşağıdaki değerlere sahip onFileStatusChanged etkinliği: { fileEntry:a fileEntry for the file, status: 'synced', action: 'updated', direction: 'local_to_remote' }.

Benzer şekilde, yerel etkinliklerden bağımsız olarak senkronizasyon hizmeti, ve değişiklikleri Google Drive'dan yerel depolama alanına indirir. Uzaktan kumanda yeni bir dosya eklendiğinde, aşağıdaki değerlere sahip bir etkinlik tetiklenir: { fileEntry: a fileEntry for the file, status: 'synced', action: 'added', direction: 'remote_to_local' }

Aynı dosya için hem yerel hem de uzak tarafta çakışan değişiklikler varsa ve çakışan değişiklikler çözüm politikası 'manual' değerine ayarlanır, dosya durumu conflicting olarak değiştirilir ve senkronizasyon hizmetinden ayrılır ve çakışma çözülene kadar senkronize edilmez. Burada aşağıdaki değerlere sahip bir etkinliğin tetiklenmesi: { fileEntry: a fileEntry for the file, status: 'conflicting', action: null, direction: null }

Bu etkinlik için, durumdaki değişikliklere yanıt veren bir işleyici ekleyebilirsiniz. Örneğin, Chrome Music Player uygulaması, Google Drive'dan senkronize edilen, ancak henüz dinlemediğiniz yeni müzikleri dinler belirli bir istemcide kullanıcının yerel depolama alanına aktarılır. Bulunan tüm müzikler senkronize edilir müşteri:

chrome.syncFileSystem.onFileStatusChanged.addListener(function(fileInfo) {
  if (fileInfo.status === 'synced') {
    if (fileInfo.direction === 'remote_to_local') {
      if (fileInfo.action === 'added') {
        db.add(fileInfo.fileEntry);
      } else if (fileInfo.action === 'deleted') {
        db.remove(fileInfo.fileEntry);
      }
    }
  }
});

API kullanımını kontrol etme

API'nin kullandığı veri miktarını kontrol etmek için uygulamanın yerel korumalı alan dizinini veya syncFileSystem.getUsageAndQuota tarafından döndürülen kullanım baytı:

chrome.syncFileSystem.getUsageAndQuota(fileSystem, function (storageInfo) {
   updateUsageInfo(storageInfo.usageBytes);
   updateQuotaInfo(storageInfo.quotaBytes);
});

Ayrıca, kullanıcının senkronizasyon arka uç hizmeti depolama alanına da (Google Drive'da) bakabilirsiniz. Senkronize edilen dosyalar: Chrome Senkronize Edilebilir Dosya Sistemi adlı gizli bir Google Drive klasörüne kaydedilir. Klasör şurada gösterilmeyecek: "Drive'ım" bölümünüz ancak arama kutusunda klasör adında arama yapılarak erişilebilir. ( uzak klasör düzeninin, sürümler arasında geriye dönük uyumluluğu koruyacağı garanti edilmez.)