欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

.net core下对于附件上传下载的实现示例

程序员文章站 2022-04-25 20:34:13
本篇主要介绍下文件的上传与下载。分享给大家,具体如下: 文件上传下载也是系统中常用的功能,不啰嗦,直接上代码看下具体的实现。 文件上传 .net core通过 ifo...

本篇主要介绍下文件的上传与下载。分享给大家,具体如下:

文件上传下载也是系统中常用的功能,不啰嗦,直接上代码看下具体的实现。

文件上传

.net core通过 iformfile 接收文件对象,再通过流的方式保存至指定的地方。

[httppost("upload")]
//[disablerequestsizelimit] //禁用http限制大小
[requestsizelimit(100*1024*1024)] //限制http大小
public async task<iactionresult> post(list<iformfile> files)
{
  try
  {
    if (files == null || !files.any())
      return assertnotfound(new responsefileresult { result = false, code = responsecode.invalidparameters, errormessage = "附件不能为空" });


    string filepath = path.combine(directory.getcurrentdirectory(), basefile, $@"template");
    if (!directory.exists(filepath))
      directory.createdirectory(filepath);

    var result = new responsefileresult();
    var filelist = new list<fileresultmodel>();

    foreach (var file in files)
    {
      var filemodel = new fileresultmodel();
      var filename = contentdispositionheadervalue
              .parse(file.contentdisposition)
              .filename
              .trim('"');
      var newname = guid.newguid().tostring() + path.getextension(filename);
      var filefullpath = path.combine(filepath, $@"{newname}");

      using (filestream fs = new filestream(filefullpath, filemode.create))//system.io.file.create(filefullpath)
      {
        file.copyto(fs);
        fs.flush();
      }


      filelist.add(new fileresultmodel { name = filename, size = file.length, url = $@"/file/download?filename={newname}" });
    }
    result.fileresultlist = filelist;
    return assertnotfound(result);
  }
  catch(exception ex)
  {
    return assertnotfound(new responsefileresult { result = false, code = responsecode.unknownexception, errormessage = ex.message });
  }
}

其中http会默认限制一定的上传文件大小,可通过 [disablerequestsizelimit] 禁用http限制大小,也可通过 [requestsizelimit(1024)] 来指定限制http上传的大小。

文件下载

相对于上传,下载就比较简单了,找到指定的文件,转换成流,通过.net core自带的 file 方法返回流文件,完成文件下载:

[httpget("download")]
public async task<iactionresult> get(string filename)
{
  try
  {
    var addrurl = path.combine(directory.getcurrentdirectory(), basefile, $@"{filename}");
    filestream fs = new filestream(addrurl, filemode.open);
    return file(fs, "application/vnd.android.package-archive", filename);
  }
  catch(exception ex)
  {
    return notfound();
  }
}

总结

文件的上传下载的基本操作简单介绍了下,大家可以尝试下。以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。