这里写自定义目录标题
背景
项目中需要用到导出Excel数据,按照以前的常规做法都是先在项目里面保存一个Excel模板文件,然后把数据写到这个Excel里面,然后导出。这次采用在内存中动态的生成文件,然后导出。
ICacheManager
ABP 框架自带的ICacheManager 缓存方法,给生成的文件生成一个缓存标记,默认1分钟后清除缓存。本次导出的文件标记则用缓存记录。对每一个生成的文件会创建一个对应的token值。然后根据这个token值来下载文件。
实际操作
1.创建文件缓存帮助类 TempFileCacheManager
/// <summary>
/// TempFileCacheManager.
/// </summary>
public class TempFileCacheManager : ITempFileCacheManager
{
/// <summary>
/// TempFileCacheName.
/// </summary>
public const string TempFileCacheName = "TempFileCacheName";
private readonly ICacheManager _cacheManager;
/// <summary>
/// Initializes a new instance of the <see cref="TempFileCacheManager"/> class.
/// TempFileCacheManager.
/// </summary>
/// <param name="cacheManager">cacheManager.</param>
public TempFileCacheManager(ICacheManager cacheManager)
{
this._cacheManager = cacheManager;
}
/// <summary>
/// SetFile.
/// </summary>
/// <param name="token">名称.</param>
/// <param name="content">内容.</param>
public void SetFile(string token, byte[] content)
{
this._cacheManager.GetCache(TempFileCacheName).Set(token, content, new TimeSpan(0, 0, 1, 0)); // expire time is 1 min by default
}
/// <summary>
/// GetFile.
/// </summary>
/// <param name="token">token.</param>
/// <returns>文件字节流.</returns>
public byte[] GetFile(string token)
{
return this._cacheManager.GetCache(TempFileCacheName).Get(token, ep => ep) as byte[];
}
}
2.创建TempFileCacheManager的实现接口类 ITempFileCacheManager
using Abp.Dependency;
/// <summary>
/// ITempFileCacheManager.
/// </summary>
public interface ITempFileCacheManager : ITransientDependency
{
/// <summary>
/// SetFile.
/// </summary>
/// <param name="token">名称.</param>
/// <param name="content">内容.</param>
void SetFile(string token, byte[] content);
/// <summary>
/// GetFile.
/// </summary>
/// <param name="token">token.</param>
/// <returns>文件字节流.</returns>
byte[] GetFile(string token);
}
3.这样导出文件的方法就已经完成了,下面是一个具体的示例