Web Api Self Host大檔案上傳功能
阿新 • • 發佈:2019-02-09
Web Api 多檔案上傳功能
還是直接貼程式碼比較直觀
/// <summary>
/// 多檔案上傳介面
/// </summary>
/// <returns></returns>
public async Task<IHttpActionResult> Upload(string jobid)
{
List<Resource> resources = new List<Resource>();
// multipart/form-data
// 採用MultipartMemoryStreamProvider
var provider = new MultipartMemoryStreamProvider();
//讀取檔案資料
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var item in provider.Contents)
{
// 判斷是否是檔案
if (item.Headers.ContentDisposition.FileName != null)
{
//獲取到流
var ms = item.ReadAsStreamAsync().Result;
//進行流操作
using (var br = new BinaryReader(ms))
{
if (ms.Length <= 0 )
break;
//讀取檔案內容到記憶體中
var data = br.ReadBytes((int)ms.Length);
//Create
//當前時間作為ID
Resource resource = new Resource() { Id = DateTime.Now.ToString("yyyyMMddHHmmssffff", DateTimeFormatInfo.InvariantInfo) };
//Info
FileInfo info = new FileInfo(item.Headers.ContentDisposition.FileName.Replace("\"", ""));
//檔案型別
resource.Type = info.Extension.Substring(1).ToLower();
//Write
try
{
//檔案儲存地址
string dirPath = Path.Combine(ROOT_PATH);
if (!Directory.Exists(dirPath))
{
Directory.CreateDirectory(dirPath);
}
File.WriteAllBytes(Path.Combine(dirPath, resource.Id), data);
resources.Add(resource);
}
catch { }
}
}
}
//返回
if (resources.Count == 0)
return BadRequest();
else if (resources.Count == 1)
return Ok(resources.FirstOrDefault());
else
return Ok(resources);
}