///<summary>/// 上传图片///</summary>///<param name="file">图片</param>
[HttpPost("UploadImage")]
public ActionResult<string> UploadImage(IFormFile file)
{
try
{
var extension = Path.GetExtension(file.FileName);
var guid = Guid.NewGuid().ToString();
var fullPath = $@"{Environment.CurrentDirectory}\upload\{guid + extension}";
FileStream stream = new FileStream(fullPath, FileMode.Create);
file.CopyTo(stream);
var imgPath = $@"\upload\{guid + extension}";
return Success("上传成功", imgPath);
}
catch (Exception ex)
{
return Error("查询失败", ex);
}
}
编写SwaggerFileUploadFilter.cs代码:
using System;
using System.Linq;
using Microsoft.AspNetCore.Http;
using Swashbuckle.AspNetCore.Swagger;
using Swashbuckle.AspNetCore.SwaggerGen;
namespace Cloudec.Community
{
///<summary>/// 上传文件///</summary>publicclass SwaggerFileUploadFilter : IOperationFilter
{
///<summary>/// 上传文件///</summary>///<param name="operation"></param>///<param name="context"></param>publicvoidApply(Operation operation, OperationFilterContext context)
{
if (!context.ApiDescription.HttpMethod.Equals("POST", StringComparison.OrdinalIgnoreCase) &&
!context.ApiDescription.HttpMethod.Equals("PUT", StringComparison.OrdinalIgnoreCase))
{
return;
}
var fileParameters = context.ApiDescription.ActionDescriptor.Parameters.Where(n => n.ParameterType == typeof(IFormFile)).ToList();
if (fileParameters.Count < 0)
{
return;
}
operation.Consumes.Add("multipart/form-data");
foreach (var fileParameter in fileParameters)
{
var parameter = operation.Parameters.Single(n => n.Name == fileParameter.Name);
operation.Parameters.Remove(parameter);
operation.Parameters.Add(new NonBodyParameter
{
Name = parameter.Name,
In = "formData",
Description = parameter.Description,
Required = parameter.Required,
Type = "file"
});
}
}
}
}
Startup.cs代码:
publicvoidConfigureServices(IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
c.OperationFilter<SwaggerFileUploadFilter>();
});
}