zoukankan      html  css  js  c++  java
  • 基础教程:上传/下载ASP.NET Core 2.0中的文件

    问题

    如何上传和下载ASP.NET Core MVC中的文件。

    在一个空的项目中,更新 Startup 类以添加MVC的服务和中间件。

    1. publicvoid ConfigureServices(

    2. IServiceCollection services)

    3. {

    4. services.AddSingleton<IFileProvider>(

    5. new PhysicalFileProvider(

    6. Path.Combine(Directory.GetCurrentDirectory(), "wwwroot")));

    7. services.AddMvc();

    8. }

    9. publicvoid Configure(

    10. IApplicationBuilder app,

    11. IHostingEnvironment env)

    12. {

    13. app.UseMvc(routes =>

    14. {

    15. routes.MapRoute(

    16. name: "default",

    17. template: "{controller=Home}/{action=Index}/{id?}");

    18. });

    19. }

    添加一个控制器和操作方法来上传和下载文件。

    基础教程:上传/下载ASP.NET Core 2.0中的文件

    1. [HttpPost]

    2. public async Task<IActionResult> UploadFile(IFormFile file)

    3. {

    4. if (file == null || file.Length == 0)

    5. return Content("file not selected");

    6. var path = Path.Combine(

    7. Directory.GetCurrentDirectory(), "wwwroot",

    8. file.GetFilename());

    9. using (var stream = new FileStream(path, FileMode.Create))

    10. {

    11. await file.CopyToAsync(stream);

    12. }

    13. return RedirectToAction("Files");

    14. }

    15. public async Task<IActionResult> Download(string filename)

    16. {

    17. if (filename == null)

    18. return Content("filename not present");

    19. var path = Path.Combine(

    20. Directory.GetCurrentDirectory(),

    21. "wwwroot", filename);

    22. var memory = new MemoryStream();

    23. using (var stream = new FileStream(path, FileMode.Open))

    24. {

    25. await stream.CopyToAsync(memory);

    26. }

    27. memory.Position = 0;

    28. return File(memory, GetContentType(path), Path.GetFileName(path));

    29. }

    30. 基础教程:上传/下载ASP.NET Core 2.0中的文件

    用HTML表单添加一个Razor页面来上传文件。

    1. <form asp-controller="Home" asp-action="UploadFile" method="post"

    2. enctype="multipart/form-data">

    3. <input type="file" name="file" />

    4. <button type="submit">Upload File</button>

    5. </form>

    讨论上传

    ASP.NET Core MVC 模型绑定 提供了 IFormFile 接口来上传一个或多个文件。HTML表单必须将 编码 类型设置为 multipart / form-data, 并将type属性设置为 file的 输入 元素 。

    你也可以通过接收一个IFormFile in action方法的列表来上传多个文件, 并设置 具有多个 属性的input元素 。

    1. // In Controller

    2. [HttpPost]

    3. public async Task<IActionResult> UploadFiles(List<IFormFile> files)

    4. // In HTML

    5. <input type="file" name="files" multiple />

    您也可以将 IFormFile 作为操作方法接收的模型的属性。

    1. publicclass FileInputModel

    2. {

    3. public IFormFile FileToUpload { get; set; }

    4. }

    5. [HttpPost]

    6. public async Task<IActionResult> UploadFileViaModel(FileInputModel model)

    注意

    输入元素上的名称必须与模型绑定工作的操作参数名称(或模型属性名称)匹配。这与简单和复杂类型的模型绑定没有区别。

    下载

    Action方法需要返回 FileResult 与 流, byte [] 或文件的虚拟路径。您还需要知道 正在下载的文件的 内容类型。这是一个示例(快速/脏)实用程序的方法。

    1. private string GetContentType(string path)

    2. {

    3. var types = GetMimeTypes();

    4. var ext = Path.GetExtension(path).ToLowerInvariant();

    5. return types[ext];

    6. }

    7. private Dictionary<string, string> GetMimeTypes()

    8. {

    9. returnnew Dictionary<string, string>

    10. {

    11. {".txt", "text/plain"},

    12. {".pdf", "application/pdf"},

    13. {".doc", "application/vnd.ms-word"},

    14. {".docx", "application/vnd.ms-word"},

    15. {".xls", "application/vnd.ms-excel"},

    16. {".xlsx", "application/vnd.openxmlformats

    17. officedocument.spreadsheetml.sheet"},

    18. {".png", "image/png"},

    19. {".jpg", "image/jpeg"},

    20. {".jpeg", "image/jpeg"},

    21. {".gif", "image/gif"},

    22. {".csv", "text/csv"}

    23. };

    24. }

    25. 更多精彩文章请关注我们的微信公众号FocusDotCore

  • 相关阅读:
    Don‘t Cry for Me, Argentina
    对象池
    拒绝高姿态
    SOS: How to popup a HwndSource on topmost
    关于设计和设计文档的2个补充
    从今天开始写博客
    Kafka+Storm写入Hbase和HDFS
    工作流调度引擎Oozie
    showModalDialog在父窗体和子窗体之间传值
    慢说HttpContext
  • 原文地址:https://www.cnblogs.com/tianfengcc/p/7851877.html
Copyright © 2011-2022 走看看