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));
            }
        }
}

 

 

参考:

ASP.NET MVC之文件上传【一】(八)

posted @ 2016-04-21 19:06  zslm___  阅读(159)  评论(0编辑  收藏  举报