前端api地址
/api/FilesApi/Upload?moduleName=AdvertisementCover
后端
public async Task<ResponseModel<string>> Upload(string moduleName)
{
//检查POST的是否为MultiPart
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = new MultipartMemoryStreamProvider();
//await Request.Content.ReadAsMultipartAsync(provider);
await Request.Content.ReadAsMultipartAsync(provider);
//var multipartMemoryStreamProvider = Request.Content.ReadAsMultipartAsync();
//数据将会被加载
var contents = provider.Contents;
var relativePath = string.Empty;
var fileFullName = contents[0].Headers.ContentDisposition.FileName.Replace("\"", "");
string fileExt = Path.GetExtension(fileFullName).ToLower();
string fileName = fileFullName.Replace(fileExt, string.Empty);
string newFileFullName = Guid.NewGuid().ToString() + fileExt;
if (!fileExt.Contains(".jpg") && !fileExt.Contains(".png") && !fileExt.Contains(".gif"))
return ResponseProvider<string>.Fail("请上传jpg、png、gif文件");
relativePath = "/UpLoadFile/" + moduleName;
var savePath = string.Empty;
savePath = HttpContext.Current.Server.MapPath("~" + relativePath);
if (!Directory.Exists(savePath))
Directory.CreateDirectory(savePath);
string fileSaveLocation = savePath + "/" + newFileFullName;
double fileSize = 0;
using (var stream = contents[0].ReadAsStreamAsync().Result)
{
fileSize = stream.Length * 1.0f / 1024 / 1024;
if (fileSize > 5)
return ResponseProvider<string>.Fail("文件太大,请上传5M以内文件");
// 把 Stream 转换成 byte[]
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
// 设置当前流的位置为流的开始
stream.Seek(0, SeekOrigin.Begin);
// 把 byte[] 写入文件
FileStream fs = new FileStream(fileSaveLocation, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(bytes);
bw.Close();
fs.Close();
}
var fileFullUrl= relativePath + "/" + newFileFullName;
return ResponseProvider<string>.Success(fileFullUrl);
}