.net coreの下で添付ファイルのアップロードとダウンロードの実現


下一篇Netcoreの下でExcelのいくつかの操作と使用について主に紹介した.Netcoreの下でexcelの関連操作、本編は主に下のファイルのアップロードとダウンロードを紹介します.
ファイルのアップロードダウンロードもシステムでよく使われる機能で、くどくどしないで、直接コードに行って具体的な実現を見ます.

ファイルのアップロード


.net coreはIFormFileでファイルオブジェクトを受信し、指定された場所にストリームで保存します.
[HttpPost("upload")]
//[DisableRequestSizeLimit] //  http    
[RequestSizeLimit(100*1024*1024)] //  http  
public async Task Post(List 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();

        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アップロードを制限するサイズを指定したりすることができます.

ファイルのダウンロード


アップロードに対して、ダウンロードは比較的簡単で、指定したファイルを見つけて、ストリームに変換して、通過します.Netcoreが持参したFileメソッドはストリームファイルを返し、ファイルのダウンロードを完了します.
[HttpGet("download")]
public async Task 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();
    }
}

まとめ


ファイルのアップロードとダウンロードの基本的な操作を簡単に紹介しましたので、試してみてください.