上传至本地服务器

RsCode.Storage.LocalStorage可以完成文件上传到本地服务器,以及上传文件的访问控制,通过在appsettings.json文件中配置即可拥有这些功能,使用步骤如下:

1.appsettings.json中添加上传的配置信息

 //本地存储配置 
  "LocalStorage": {
    "UploadTokenUrl":"/storage/uptoken", //获取token的地址
    "UploadUrl": "/storage/upload",  //文件上传地址
    "SavePath": "d:\\test\\",  //服务器上保存文件的物理路径 必须以/或\ 结尾
    "AcccessPath":"/res/", //虚拟文件访问地址开始的标记
    "AccessKey": "",//不填
    "SecretKey": "",//不填
    "Domain": "上传后资源地址", //上传后资源地址,例:http://res.rscode.cn
    "Bucket": "", //不填
    "Zone": "", //不填
    "UploadTokenExpireTime": 30, // 上传token有效时间单位:秒
    "DownloadTokenExpireTime": 5,//下载token有效时间
    "ManageTokenExpireTime": 5   //管理token有效时间
  }

这个示例配置,可以将上传文件post到/storage/upload,保存在d盘test目录下,通过 http://xx.cc/res/xx.xx访问

2.添加存储服务

引用RsCode.Storage.LocalStorage到项目中 添加本地存储服务

public void ConfigureServices(IServiceCollection services)
{
   //其它服务...
  services.AddLocalStorage(Configuration);
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
  //其它服务...
  app.UseLocalStorage(Configuration); //本地上传中间件
}

3.获取上传token信息

注入服务 IEnumerable<IStorageProvider>providers
获取实例 var local=providers.FirstOfDefault(s=>s.StorageName=="local");
获取token var tokenInfo=local.GetUploadToken();

4.发送上传请求

//获取本地存储配置 [Inject]LocalStorageOptions storageOptions { get; set; }

1.获取上传token信息

var local=providers.FirstOfDefault(s=>s.StorageName=="local");
var tokenInfo=local.GetUploadToken();

模拟上传,提交参数key,token,上传文件,从表单中取值
 

local.UploadAsync();

5.访问上传的资源

中间件会拦截 LocalStorage.AccessPath 值开头的网址,然后去LocalStorage.SavePath值定义的物理路径中找文件,如果找到就返回文件 继承ILocalStorageAccess,实现方法AccessFileAsync(),可以自定义资源访问逻辑

注意:上传地址不能和现有页面或控制器重名

调试上传时程序退出的办法:
vs 工具-选项-项目和解决方案-web项目,取消 “在浏览器窗口关闭时停止调试程序,在调试停止时关闭浏览器”