Работа с хранилищем GridJs
Работа с хранилищем GridJs
процесс работы с общим файлом
После импорта файла таблицы ,
GridJs создаст файл кеша с указанным uid в соответствии с реализацией GridCacheForStream,
в формате Aspose.Cells.SaveFormat.Xlsx ,
GridJs также сохраняет все фигуры/изображения в zip-архив в папке кеша для последующего отображения фигур/изображений в клиентском UI.
и после каждой операции обновления в клиентском интерфейсе (UI),
например, установка значения ячейки, установка стиля ячейки и т. д.,
Клиентский JS GridJs инициирует вызов действия контроллера для обновления данных.
В этом действии происходит сохранение обратно в файл кэша во время выполнения метода UpdateCell.
// post: /GridJs/UpdateCell
[HttpPost]
public ActionResult UpdateCell( )
{
string p = HttpContext.Request.Form["p"];
string uid = HttpContext.Request.Form["uid"];
GridJsWorkbook gwb = new GridJsWorkbook();
String ret = gwb.UpdateCell(p, uid);
return Content(ret, "text/plain", System.Text.Encoding.UTF8);
}
где на самом деле находится файл кэша
А. Если вы реализуете GridCacheForStream самостоятельно. например, в приведенном ниже коде мы можем просто поместить и получить файл кэша из “D:\temp”
Config.FileCacheDirectory=@"D:\temp";
GridJsWorkbook.CacheImp=new LocalFileCache();
public class LocalFileCache : GridCacheForStream
{
public LocalFileCache()
{
string streampath = Config.FileCacheDirectory;
if (!Directory.Exists(streampath))
{
Directory.CreateDirectory(streampath);
}
}
/// <summary>
/// Implement this method to savecache,save the stream to the cache object with the key id.
/// </summary>
/// <param name="s">the source stream </param>
/// <param name="uid">the key id.</param>
public override void SaveStream(Stream s, String uid)
{//make sure the directory exist
String filepath = Path.Combine(Config.FileCacheDirectory, uid);
using (FileStream fs = new FileStream(filepath, FileMode.Create))
{
s.Position = 0;
s.CopyTo(fs);
}
}
/// <summary>
/// Implement this method to loadcache with the key uid,return the stream from the cache object.
/// </summary>
/// <param name="uid">the key id</param>
/// <returns>the stream from the cache</returns>
public override Stream LoadStream(String uid)
{//make sure the directory is exist
String filepath = Path.Combine(Config.FileCacheDirectory, uid);;
FileStream fs = new FileStream(filepath, FileMode.Open);
return fs;
}
...
Б. Если вы не устанавливаете GridJsWorkbook.CacheImp,
GridJs уже реализовал дефолтную реализацию.
GridJs создаст и сохранит файл кеша в папке: Config.FileCacheDirectory/streamcache
.
как получить обновленный результат файла
1. создать указанный uid для файла
Убедитесь, что существует соответствие между файлом и идентификатором (UID),
Например
...
//generte a uid for the file
String uid = GridJsWorkbook.GetUidForFile(filename)
...
//get JSON result which will be used in client ui for the file by filename and uid
public ActionResult DetailFileJsonWithUid(string filename,string uid)
{
String file = Path.Combine(TestConfig.ListDir, filename);
GridJsWorkbook wbj = new GridJsWorkbook();
//check if already in cache
StringBuilder sb= wbj.GetJsonByUid(uid, filename);
if(sb==null)
{
Workbook wb = new Workbook(file);
wbj.ImportExcelFile(uid, wb);
sb = wbj.ExportToJsonStringBuilder(filename);
}
return Content(sb.ToString(), "text/plain", System.Text.Encoding.UTF8);
}
2. получить файл из кэша по uid
например: в действиях загрузки, вы можете взять его из каталога кэша по uid и имени файла.
Stream fileStream = GridJsWorkbook.CacheImp.LoadStream(uid + "/" + filename);
Для получения более подробной информации вы можете проверить пример здесь: https://github.com/aspose-cells/Aspose.Cells-for-.NET/tree/master/Examples_GridJs