接口 web api Swagger 文件上傳


原文:https://github.com/domaindrivendev/Swashbuckle/issues/120
原文:https://www.cnblogs.com/yaosj/p/10343185.html
原文:https://blog.csdn.net/superes/article/details/1330437
原文:https://www.cnblogs.com/carekee/articles/2094675.html



1、FileInputAttribute,添加一個特性類,用於標識該方法是否支持文件上傳

[AttributeUsage(AttributeTargets.Method)]
public sealed class FileInputAttribute : Attribute
{
    public string Name { get; private set; }
    public string Description { get; private set; }

    public FileInputAttribute(string name, string description)
    {
        Name = name;
        Description = description;
    }
}

2、HttpAuthHeaderFilter,在swagger中,顯示文件上傳

public class HttpAuthHeaderFilter : IOperationFilter
{
    void IOperationFilter.Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        if (operation.parameters == null)
        {
            operation.parameters = new List<Parameter>();
        }

        var requestAttributes = apiDescription.GetControllerAndActionAttributes<FileInputAttribute>();
        foreach (var attr in requestAttributes)
        {
            operation.parameters.Add(new Parameter
            {
                description = attr.Description,
                name = attr.Name,
                @in = "formData",
                required = true,
                type = "file"
            });
            operation.consumes.Add("multipart/form-data");
        }
    }
}

3、SwaggerConfig,注入到swagger的配置文件中

取消注釋
c.OperationFilter<AssignOAuth2SecurityRequirements>();;
修改為
c.OperationFilter<HttpAuthHeaderFilter>();

4、HomeApiController,創建一個測試

[HttpPost, AllowAnonymous, FileInput("ImportImage", "Upload image file")]
public string Upload()
{
    return HttpContext.Current.Request.Files[0].FileName;
}

遺留的問題

不知道為什么,先暫時跳過,以后有時間再仔細了解

    [HttpPost, AllowAnonymous, FileInput("ImportImage", "Upload image file")]
    public string PostFormDataImage3()
    {
        //傳同樣的文件 第二次請求接口時,相應的時間會異常的長
        return "123";

        //傳同樣的文件 第二次請求 不會有問題
        //return HttpContext.Current.Request.Files[0].FileName;
    }

一個不是很好的解決方式,但可以解決該問題。以后有時候再找找問題的原因
TokenAuthorizeAttribute中,添加一句代碼即可int fileNum = System.Web.HttpContext.Current.Request.Files.Count;

文件大小的限制

maxRequestLength:最大文件上載大小,單位為KB,默認值為 4096 KB (4 MB)。

<configuration>
  <system.web>
     <httpRuntime maxRequestLength="102400" />
  </system.web>
<configuration>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM