1. 首页>
  2. 技术文章>
  3. webapi图片上传支持APP

webapi图片上传支持APP

5/29/17 8:38:00 AM 浏览 1254 评论 0

webapi

现在微信或者app这么流行,就会用到微信端或者APP端调用webapi提供的图片上传接口实现上传的功能了,主要代码实现如下:

protected string FileUpload(string dirPath)
{
	if (!Request.Content.IsMimeMultipartContent("form-data"))
	{
		throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
	}
	string dirTempPath = HttpContext.Current.Server.MapPath(dirPath);

	if (!Directory.Exists(dirTempPath))
	{
		Directory.CreateDirectory(dirTempPath);
	}
	//设置上传目录
	var provider = new MultipartFormDataStreamProvider(dirTempPath);

	Task.Run(async () => await Request.Content.ReadAsMultipartAsync(provider)).Wait();

			
		var file = provider.FileData[0];

		

		//最大文件大小
		const int maxSize = 10000000;
		//定义允许上传的文件扩展名
		const string fileTypes = "gif,jpg,jpeg,png,bmp,xls";

		string oldFileName = file.Headers.ContentDisposition.FileName.TrimStart('"').TrimEnd('"');

		string FilePath = "";

		var fileInfo = new FileInfo(file.LocalFileName);


		if (fileInfo.Length <= 0)
		{
			throw new BaseException("请选择上传文件。");
		}


		if (fileInfo.Length > maxSize)
		{
			throw new BaseException("上传文件大小超过限制。");
		}
				
		var fileExt = oldFileName.Substring(oldFileName.LastIndexOf('.'));

		if (string.IsNullOrEmpty(fileExt) || Array.IndexOf(fileTypes.Split(','), fileExt.Substring(1).ToLower()) == -1)
		{
			throw new BaseException("不支持上传文件类型,只支持"+ fileTypes);
		}
			

		string newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo);

	string filePath = Path.Combine(dirPath, newFileName + fileExt).Replace("~", "").Replace("\\", "/");

		FilePath = Path.Combine(dirTempPath, newFileName + fileExt);

		fileInfo.CopyTo(FilePath, true);


		fileInfo.Delete();


		return filePath;
}

写个DEMO自己测试下:

<html>
<body>
	<form action="/api/Upload/UploadImg" method="post" enctype="multipart/form-data">
		<input type="file"  name="filename"/>
		<input type="input"  name="Folder" value="1" />
		<input type="submit" value="上传" />
	</form>
</body>
</html

当然control层是这样的:

[HttpPost]
public string UploadImg()
{
	int Folder = HttpContext.Current.Request.Form["Folder"];
	return FileUpload(Folder);
}


网友讨论