api设置访问静态文件

 

1、默认访问wwwroot目录下文件,可以使用StaticFileOptions设置指定其他目录

基于安全考虑,默认情况下是禁止目录访问功能的。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseStaticFiles();
            var staticImageFile = new StaticFileOptions();
            staticImageFile.FileProvider = new PhysicalFileProvider(@"C:\Users\me\Documents\WeChat Files\wangjialei910\Image\Image");
            app.UseStaticFiles(staticImageFile);
            var staticFile = new StaticFileOptions();
            staticFile.FileProvider = new PhysicalFileProvider(@"C:\Users\me\Documents\WeChat Files\wangjialei910\Files");
            app.UseStaticFiles(staticFile);
            app.UseOcelot().Wait();
            app.UseMvc();
            app.Run(async (context)=> {
                await context.Response.WriteAsync("hello");
            });
        }

2、如果一个请求是未知的文件类型,静态文件中间件将返回http 404 错误(未找到),比方说.log 文件,FileExtensionContentTypeProvider类包含一个将文件扩展名映射到MIME内容类型的集合。

 

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            var provider = new FileExtensionContentTypeProvider();
            provider.Mappings[".log"] = "text/html";
            app.UseStaticFiles(new StaticFileOptions() {
                ContentTypeProvider= provider
            });
            var staticImageFile = new StaticFileOptions();
            staticImageFile.FileProvider = new PhysicalFileProvider(@"C:\Users\me\Documents\WeChat Files\wangjialei910\Image\Image");
            app.UseStaticFiles(staticImageFile);
            var staticFile = new StaticFileOptions();
            staticFile.FileProvider = new PhysicalFileProvider(@"C:\Users\me\Documents\WeChat Files\wangjialei910\Files");
            app.UseStaticFiles(staticFile);
            app.UseOcelot().Wait();
            app.UseMvc();
            app.Run(async (context)=> {
                await context.Response.WriteAsync("hello");
            });
        }

 

3、静态文件权限问题,默认情况静态文件没有权限,如果重写StaticFileMiddleware,权限控制在Filter中,Filter在中间件后面执行,所以可以重新新建目录,不用设置为静态目录,默认无法直接访问目录,通过访问Controller处理请求

 

[Route("api/[controller]")]
    [ApiController]
    public class FileController : ControllerBase
    {
        [HttpGet]
        [Route("image")]
        public FileResult GetImage(string name)
        {
            var file = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", name);
            //return PhysicalFile(file, "application/octet-stream");
            return PhysicalFile(file, "image/jpg");
        }
    }

 

http://localhost:50002/api/file/image/?name=image\1.jpg

 

posted @ 2019-02-23 17:26  wjl910  阅读(488)  评论(0)    收藏  举报