MVC文件上传(服务端+客户端)
服务端代码:
using System; using System.Collections.Generic; using System.Web; using System.IO; /// <summary> /// 保存文件 /// </summary> /// <param name="context">上下文环境</param> /// <param name="serverPath">服务器路径</param> /// <param name="useRealName">是否使用原有文件名</param> /// <returns>文件的绝对路径集合</returns> public IEnumerable<string> SaveFileFromRequest(HttpContextBase context, string serverPath, bool useRealName = false) { var request = context.Request; foreach (string fileName in request.Files) { HttpPostedFileBase httpFile = request.Files[fileName]; if (httpFile != null && httpFile.ContentLength > 0) { var s = Path.GetExtension(httpFile.FileName); if (s != null) { var extension = s.ToLower(); var guidFileName = useRealName ? Path.GetFileName(httpFile.FileName) : Guid.NewGuid() + extension; var relativePath = serverPath + guidFileName; var absolutePath = context.Server.MapPath("~" + relativePath); string directory = Path.GetDirectoryName(absolutePath); if (!Directory.Exists(directory)) { Directory.CreateDirectory(directory); } httpFile.SaveAs(absolutePath); yield return absolutePath; } } } }
/// <summary> /// 图片资源上传action /// </summary> /// <returns></returns> [HttpPost] public async Task<JsonpResult> ImageUpload() { return await Task.Run(() => { var absoluteFileNames = SaveFileFromRequest(HttpContext, FileHelper.PrejectRootDirectory, false); var relativeFileNames = absoluteFileNames.Select(FileHelper.AbsoluteToRelative); return new JsonpResult() { JsonRequestBehavior = JsonRequestBehavior.AllowGet, Data = relativeFileNames }; }); }
客户端代码:
using System; using System.IO; using System.Net; using RestSharp; public class UploadFileTest { public static void UploadFile() { var fileLocation = @"D:\ILspy.zip"; try { var request = new RestRequest(Method.POST); request.AddFile("file", fileLocation); //calling server with restClient var restClient = new RestClient { BaseUrl = new Uri("http://localhost:6246/Picture/StaticFileUpLoad?customerId=1") }; restClient.ExecuteAsync(request, (response) => { if (response.StatusCode == HttpStatusCode.OK) { Console.WriteLine("上传成功...\n" + response.Content); } else { Console.WriteLine(string.Format("出错啦:{0}", response.Content)); } }); } catch (Exception ex) { Console.WriteLine(string.Format("出错啦:{0}", ex.Message)); } } }
参考: