一 前端
html部分代码
<form enctype="multipart/form-data">
<div>
<input type="file" name="uploadImage" id="uploadImage">
<input type="button" id="btn" value="上传" />
</div>
</form>
js部分代码
$("#btn").click(function () {
var formData = new FormData();
formData.append("FileUpload1", document.getElementById('uploadImage').files[0]);
$.ajax({
url: '/api/common/imgupload',
type: "POST",
data: formData,
/**
*必须false才会自动加上正确的Content-Type
*/
contentType: false,
/**
* 必须false才会避开jQuery对 formdata 的默认处理
* XMLHttpRequest会对 formdata 进行正确的处理
*/
processData: false,
success: function (data) {
alert(JSON.stringify(data));
}
});
})
二 webapi 后台
/// <summary>
/// 上传
/// </summary>
/// <returns></returns>
[HttpPost]
[Route("api/common/imgupload")]
public Task<Hashtable> Imgupload()
{
// 检查是否是 multipart/form-data
if (!Request.Content.IsMimeMultipartContent("form-data"))
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
//文件保存目录路径
string SaveTempPath = "/upload/head/";
String dirTempPath = HttpContext.Current.Server.MapPath(SaveTempPath);
if (!Directory.Exists(dirTempPath))
{
Directory.CreateDirectory(dirTempPath);
}
// 设置上传目录
var provider = new MultipartFormDataStreamProvider(dirTempPath);
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<Hashtable>(o => {
Hashtable hash = new Hashtable();
hash["code"] = 0;
hash["msg"] = "上传出错";
var file = provider.FileData[0];
string orfilename = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');
FileInfo fileinfo = new FileInfo(file.LocalFileName);
//最大文件大小
int maxSize = 10000000;
if (fileinfo.Length <= 0)
{
hash["code"] = 0;
hash["msg"] = "请选择上传文件。";
}
else if (fileinfo.Length > maxSize)
{
hash["code"] = 0;
hash["msg"] = "上传文件大小超过限制。";
}
else
{
string fileExt = orfilename.Substring(orfilename.LastIndexOf('.'));
//定义允许上传的文件扩展名
String fileTypes = "gif,jpg,jpeg,png,bmp";
if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
{
hash["code"] = 1;
hash["msg"] = "上传文件扩展名是不允许的扩展名。";
}
else
{
String ymd = DateTime.Now.ToString("yyyyMMdd", System.Globalization.DateTimeFormatInfo.InvariantInfo);
String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", System.Globalization.DateTimeFormatInfo.InvariantInfo);
fileinfo.CopyTo(Path.Combine(dirTempPath, newFileName + fileExt), true);
fileinfo.Delete();
hash["code"] = 1;
hash["msg"] = "上传成功";
hash["path"] = SaveTempPath + newFileName + fileExt;
}
}
return hash;
});
return task;
}