C# WebAPI 使用ReadAsMultipartAsync 进行上传文件
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Web.Http;
namespace WebAPIUP.Controllers
{
public class HomeController : ApiController
{
[HttpPost]
public IHttpActionResult UploadFile()
{
string PhysicalPath = "F:/VSProjects/WebAPIUP/files" + "/";
//判断文件夹是否存在
if (Directory.Exists(PhysicalPath) == false)
{
//创建用于存图片的文件夹
Directory.CreateDirectory(PhysicalPath);
}
//准备接收文件
var provider = new MultipartMemoryStreamProvider();
IEnumerable<HttpContent> parts = null;
//异步
Task.Factory.StartNew(() => parts = Request.Content.ReadAsMultipartAsync().Result.Contents, CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default).Wait();
foreach (var item in parts)
{
//判断是否有文件
if (item.Headers.ContentDisposition.FileName == null)
continue;
var ms = item.ReadAsStreamAsync().Result;
using (var br = new BinaryReader(ms))
{
if (ms.Length <= 0)
break;
var data = br.ReadBytes((int)ms.Length);
var info = new FileInfo(item.Headers.ContentDisposition.FileName.Replace("\"", ""));
//获取文件名称和文件类型
var resource = new
{
Name = info.Name,
Type = info.Extension.Substring(1).ToLower()
};
string newPath = PhysicalPath + resource.Name + "." + resource.Type;
File.WriteAllBytes(newPath, data);
}
}
return Json<dynamic>(new { Result= "文件上传成功!" });
}
}
}
浙公网安备 33010602011771号