GridJs depolama ile çalışmak

GridJs Depolama ile Çalışmak

genel dosya işlemi

Bir elektronik tablo dosyası içe aktarıldıktan sonra,

GridJs, Config.getFileCacheDirectory() klasöründe belirtilen uid ile bir önbellek dosyası oluşturacaktır ,

Aspose.Cells.SaveFormat.Xlsx formatında olacaktır ,

GridJs ayrıca tüm şekilleri/resimleri zip arşiv dosyasına kaydeder ve daha sonra şekilleri/resimleri istemci UI’da göstermek için Config.getPictureCacheDirectory() klasörüne kaydeder.

ve istemci arayüzünde her güncelleme işleminden sonra,

örneğin hücre değeri ayarla, hücre stili ayarlama, vb.,

GridJs istemci tarafı js, bir GüncellemeHücresi işlemi yapmak için bir denetleyici eylemi tetikler.

Bu eylem sırasında, Bir GüncellemeHücre yöntemi sırasında önbellek dosyasına bir kayıt gerçekleşecektir.

    @PostMapping("/UpdateCell")
    public ResponseEntity<String> updateCell(HttpServletRequest request) {
        String p = request.getParameter("p");
        String uid = request.getParameter("uid");
        GridJsWorkbook gwb = new GridJsWorkbook();
        String ret;
		try {
			ret = gwb.updateCell(p, uid);
			return new ResponseEntity<>(ret, HttpStatus.OK);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			return new ResponseEntity<>(gwb.errorJson(e.getMessage()), HttpStatus.OK);
		}

    }

önbellek dosya aslında nerede

A. Eğer GridCacheForStream uygularsak ve GridJsWorkbook.CacheImp’i ayarlarsak. örneğin aşağıdaki kodda “D:\temp” dizinine sadece önbellek dosyasını yerleştirebilir ve alabiliriz.

Config.setFileCacheDirectory("D:\temp");
GridJsWorkbook.CacheImp=new LocalFileCache();
public class LocalFileCache extends GridCacheForStream {

	@Override
	public void saveStream(InputStream s, String uid) {
		// make sure the directory is exist
		String filepath = Paths.get(Config.getFileCacheDirectory(), "streamcache", uid.replace('/', '.')).toString();
		try (FileOutputStream fos = new FileOutputStream(filepath.toString())) {
			s.reset(); // Equivalent to s.Position = 0 in C#
			byte[] buffer = new byte[1024];
			int length;
			while ((length = s.read(buffer)) > 0) {
				fos.write(buffer, 0, length);
			}
			fos.flush();
		} catch (IOException e) {
			e.printStackTrace();
		}

	}

	@Override
	public InputStream loadStream(String uid) {
		String filepath = Paths.get(Config.getFileCacheDirectory(), "streamcache", uid.replace('/', '.')).toString();
		try {
			return new FileInputStream(filepath);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return null;
		}
	}

	@Override
	public boolean isExisted(String uid) {
		String filepath = Paths.get(Config.getFileCacheDirectory(), "streamcache", uid.replace('/', '.')).toString();
		return Files.exists(Paths.get(filepath));
	}

	@Override
	public String getFileUrl(String uid) {
		return "/GridJs2/GetFileUseCacheStream?id=" + uid;
	}

}
		...

B. Eğer GridJsWorkbook.CacheImp’i ayarlamazsak,

GridJs, Config.getFileCacheDirectory() klasörü içinde dosya oluşturacak ve saklayacak, bu varsayılan önbellek dizinidir ve ayarlayabileceğimiz önbellek dizinidir.

güncellenmiş sonuç dosyasını nasıl alınır

1. dosya için belirtilen bir uid

Dosya ve uid arasında belirli bir eşleme bağlantısının olması gerektiğinden emin olun,

bir dosya adı için her zaman aynı uid’yi alabilirsiniz, rastgele oluşturulmaz.

Örneğin, sadece dosya adını kullanmak yeterlidir.

//in controller  

     @GetMapping("/DetailStreamJsonWithUid")
    public void detailStreamJsonWithUid(@RequestParam String filename, @RequestParam String uid,HttpServletResponse response) {


        	Path filePath = Paths.get(listDir, filename);
            GridJsWorkbook wbj = new GridJsWorkbook();

            response.setContentType("application/json");
            response.setHeader("Content-Encoding", "gzip");
            try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(response.getOutputStream())) {
                wbj.importExcelFile(filePath.toString());
                wbj.jsonToStream(gzipOutputStream, filename);
            } catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
    }

2. istemci arayüzü işlemi ile senkronize olun

Aslında bazı istemci arayüzü işlemleri için,

örneğin:

etkin sayfayı başka bir sayfaya değiştir,

resmin pozisyonunu değiştir,

resmi döndür/boyutlandır, vb.

GüncellemeHücre eylemi tetiklenmeyecektir.

Bu nedenle, güncellenmiş dosyayı istemci arayüzünün gösterdiği gibi almak istiyorsak,

bu istemci arayüzü işlemlerini senkronize etmek için kaydetme işleminden önce bir birleştirme işlemi yapmamız gerekmektedir.

//in the js
  function save() {
            if (!xs.buffer.isFinish()) {
              alert('updating is inprogress,please try later');
                return;
            }
            let datas = xs.datas;
            delete datas.history;
            delete datas.search;
            delete datas.images;
            delete datas.shapes;

        var jsondata = {
          sheetname: xs.sheet.data.name,
          actrow: xs.sheet.data.selector.ri,
          actcol: xs.sheet.data.selector.ci,
          datas: xs.getUpdateDatas(),
        };

        const data = {
          p: JSON.stringify(jsondata),
          uid: uniqueid,
        };
		....
		//go on to do ajax post to trigger controller action
//in controller action 
  GridJsWorkbook wb = new GridJsWorkbook();
  wb.mergeExcelFileFromJson(uid, p);
  //after merge do save to chache or to a stream or whaterver you want to save to ,here we just save to cache
  wb.saveToCacheWithFileName(uid,filename,password);

3. Önbellekten dosya URL’sini alın

örneğin: indirme işlemi için, uid ile doğrudan önbellek dizininden alabilirsiniz.

//in controller  

      String fileUrl = null;
			if (GridJsWorkbook.CacheImp != null) {
				fileUrl = GridJsWorkbook.CacheImp.getFileUrl(uid + "/" + filename);
			} else {
				fileUrl = "/GridJs2/GetFile?id=" + uid + "&filename=" + filename;
			}
			return ResponseEntity.ok("\""+fileUrl+"\"");

Daha fazla detaylı bilgi için buradaki örneği kontrol edebilirsiniz: https://github.com/aspose-cells/Aspose.Cells-for-java/tree/master/Examples_GridJs