1. 程式人生 > 實用技巧 >MVC AJAX方法 檔案上傳下載

MVC AJAX方法 檔案上傳下載

前端頁面

<input type="file" id="f1" />
<input type="button" value="上傳檔案" onclick="ff()" />

<a href="~/Default/download">下載檔案</a>
<a href="~/Default/GetFileFromDisk">Click to get file</a>

<script>
    function ff() {
        var formData = new FormData();
        var file = document.getElementById("f1").files[0];
        formData.append("fileInfo", file);
        $.ajax({
            url: "/Default/UpLoad/",
            type: "POST",
            data: formData,
            contentType: false,//必須false才會自動加上正確的Content-Type
            processData: false,//必須false才會避開jQuery對 formdata 的預設處理,XMLHttpRequest會對 formdata 進行正確的處理
            success: function (data) {
                //if (data.Code < 0)
                    alert(data)
                //else
            },
            error: function (data) {
                alert("上傳失敗!");
            }
        });
    }
</script>

控制器方法

namespace WebApplication1.Controllers
{
    public class DefaultController : Controller
    {
        APIFileHelp help = new APIFileHelp();
        // GET: Default
        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public string UpLoad()
        {
            return help.UpLoad();
        }
        public FilePathResult GetFileFromDisk()
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + "Upload/";
            string fileName = "新建文字文件.txt";
            return File(path + fileName, "text/plain", "test.txt");
        }
    }
}

檔案幫助類

namespace WebApplication1.Models
{
    public class APIFileHelp
    {
        public string[] ExtentsfileName = new string[] { ".doc",".txt", ".xls", ".png", ".jpg" };
        public string UrlPath = "/Upload/";
        /// <summary>
        ///響應物件 ,使用前先賦值
        /// </summary>
        public HttpResponse Response = HttpContext.Current.Response;
        public HttpRequest Request = HttpContext.Current.Request;

        public string zhi { get; set; }
        public string UpLoad()
        {
            if (Request.Files.Count > 0)
            {
                var file = Request.Files[0];
                var extenfilename = Path.GetExtension(file.FileName);
                //判斷 路徑是否存在
                string path = HttpContext.Current.Server.MapPath(UrlPath);
                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                if (ExtentsfileName.Contains(extenfilename.ToLower()))
                {
                    string urlfile = UrlPath + DateTime.Now.ToFileTime() + extenfilename;
                    string filepath = HttpContext.Current.Server.MapPath(urlfile);
                    file.SaveAs(filepath);
                    return zhi=urlfile;
                }
                else
                {
                    return zhi = "上傳失敗";
                }
            }
            else
            {
                return zhi = "上傳失敗";
            }
        }
    }
}