1. 程式人生 > >.NET Core 文件的上傳與下載

.NET Core 文件的上傳與下載

獲取 sin return rec 簡單 綁定 tty button 方法

1.前言

   文件導入導出是簡單且常用的功能,以下示例實現了文件上傳與下載的幾種方法,如有不妥的地方,歡迎指正。小白一枚,在往目標前進。

2.1.文件上傳 -- 純文件

1 <form action="/Home/Index" method ="post" enctype="multipart/form-data" > 
2     <input type="file" multiple/>
3     <input id="upload" type="submit" />
4 </form>
 1    [HttpPost]
2 public IActionResult Index(List<IFormFile> files) 3 { 4 5 foreach (var file in files) 6 { 7 //獲取文件名 8 var fileName = file.FileName; 9 //保存在wwwroot文件夾下 10 fileName = hostingEnv.WebRootPath + $"
\\{fileName}";12 using (FileStream fs = System.IO.File.Create(fileName)) 13 { 14 file.CopyTo(fs); 15 fs.Flush(); 16 } 17 } 18 return View(); 19 }

2.2.文件上傳 -- 多類型內容上傳

對於這種不只有文件的表單,可以采用模型綁定的方式。

 <form action="/Home/Index" method ="post" enctype="multipart/form-data" > 
<input type="file" multiple/>
<input type="text" name="Name"/>
<input id="upload" type="submit" />
</form>
        /// <summary>
        /// 表單上傳文件
        /// </summary>
        /// <param name="files"></param>
        /// <returns></returns>
        [HttpPost]
        public IActionResult Index(FormObject obj)
        {
            foreach (var file in obj.Files)
            {
                //獲取文件名
                var fileName = ContentDispositionHeaderValue
                                .Parse(file.ContentDisposition)
                                .FileName
                                .Trim(");
                fileName = hostingEnv.WebRootPath + $"\\{fileName}";
                using (FileStream fs = System.IO.File.Create(fileName))
                {
                    file.CopyTo(fs);
                    fs.Flush();
                }
            }
            return View();
        }

//模型類
public class FormObject

{
       public List<IFormFile> Files{ get; set; }
       public string Name { get; set; }
}

2.3.文件上傳 -- Ajax上傳

    <input type="text" name="Name" value="123"/>    
    <input type="file" id="fileUpload" name="fileUpload" multiple/>
    <input id="upload" type="button" value="ajax 提交"/>
<script type="text/javascript">
    $(function () {
        $("#upload").click(function (evt) {
            ///取選擇的文件加入FormData中
            var fileUpload = $("#fileUpload").get(0);
            var files = fileUpload.files;
            var data = new FormData();
            for (var i = 0; i < files.length; i++) {
                data.append(files[i].name, files[i]);
            }
           // data.append("Name", $(‘input[name="Name"]‘).val())
            $.ajax({
                type: "POST",
                url: "http://192.168.0.175:8095/api/Organization",
                contentType: false,
                processData: false,
                data: data,
                success: function (message) {
                    alert(message);
                },
                error: function () {
                    alert("上傳文件出現錯誤!");
                }
            });
        });
    });
</script>
        /// <summary>
        /// 通過ajax上傳
        /// </summary>
        /// <returns></returns>
        public IActionResult UploadFiles()
        {var files = Request.Form.Files;
            var value =Request.Form.First(c => c.Key == "Name").Value;//獲得表單文本項
            foreach (var file in files)
            {
                var fileName = file.FileName;
                fileName = hostingEnv.WebRootPath + $@"\{fileName}";using (FileStream fs = System.IO.File.Create(fileName))
                {
                    file.CopyTo(fs);
                    fs.Flush();
                }
            }
            return RedirectToAction("/Export", new { Title ="1",Name = 123});
        }

3.3.文件下載

 1        [HttpGet]
 2         public IActionResult ExportText()
 3         {
 4            
 5             string sFileName = $@"qmhuangtext{DateTime.Now.ToString("yyyyMMddHHmmss")}.txt";
 6             FileStream fs =new FileStream(sFileName,FileMode.OpenOrCreate);
 7             StreamWriter sw = new StreamWriter(fs);
 8             sw.WriteLine("Hello world");
 9             sw.Flush();
10             sw.Close();
11             fs.Close();
12             return File(new FileStream(sFileName, FileMode.Open), "application/octet-stream", $"導出測試{DateTime.Now.ToString("yyyyMMddHHmmss")}.txt");
13         }

.NET Core 文件的上傳與下載