文件相关操作

        以下范例中并未异常捕捉,实际应该捕捉异常。并且项目中我是把文件的详细信息在上传时放到了数据库中,然后下载和删除时从数据库中获取到文件信息,然后去服务器中操作。如有需要,可自行变换。

一、文件上传

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Renci.SshNet;

namespace WeCharGroupTest.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class FilesMaintainController : ControllerBase
    {

        /// 
        /// 上传文件
        /// 
        /// 文件
        /// 上传人
        /// 父文件夹
        /// 
        [HttpPost("Post_File")]
        public async Task Post_File(IFormFile file, string uploadName, string fileClass)
        {
            if(file != null)
            {
                string FileName = file.FileName;//文件名
                long FileSize = file.Length;//文件大小

                string FilePath = "/" + fileClass + "/" +DateTime.Now.ToString("yyyyMM") + "/";//以月份命名文件夹
                string FileNewName = DateTime.Now.ToString("yyyy-MM-ss-HH:mm:ss") + "-" + FileName ;
                string FileFullName = FilePath + FileNewName;//完整路径

                using (SftpClient sftpclient = new SftpClient("真实ip", 端口号, "imas", "imas"))
                {
                    sftpclient.Connect();

                    if (!sftpclient.Exists("/" + fileClass + "/"))
                    {
                        sftpclient.CreateDirectory("/" + fileClass + "/");//如果不存在目录,则创建。不支持创建多级目录
                    }
                    if (!sftpclient.Exists(FilePath))
                    {
                        sftpclient.CreateDirectory(FilePath);//如果不存在目录,则创建
                    }

                    MemoryStream ms = new MemoryStream();
                    file.CopyTo(ms);//把file赋给fs

                    sftpclient.BufferSize = 1024 * 1024 * 20;//设置客户端的缓冲区大小20M
                    ms.Seek(0, SeekOrigin.Begin);//将Position设置为0,即流的开始位置。
                    sftpclient.UploadFile(ms, FileFullName);

                    ms.Dispose();//释放ms
                }
                return "上传成功";
            }
            else
            {
                return "文件为空";
            }
        }
    }
}

二、文件下载

        /// 
        /// 下载文件
        /// 
        /// 文件完整路径,如/mainTest/202409/2024-09-55-14:22:55-西瓜.jpeg
        /// 文件名称,如2024-09-55-14:22:55-西瓜.jpeg
        /// 
        [HttpGet("DownLoad_File")]
        public FileContentResult DownLoad_File(string FileFullPath, string FileName)
        {

            byte[] buffer = new byte[0];
            if (FileFullPath != null)
            {
                using (var client = new SftpClient("ip", 端口号, "imas", "imas")) //创建连接对象
                {
                    client.Connect(); //连接
                    buffer = client.ReadAllBytes(FileFullPath);
                }
            }
            return File(buffer, System.Net.Mime.MediaTypeNames.Application.Octet, FileName);
        }

三、文件删除

        /// 
        /// 删除文件
        /// 
        /// 文件完整路径,如/mainTest/202409/2024-09-55-14:22:55-西瓜.jpeg
        /// 
        [HttpDelete("Delete_File")]
        public string Delete_File(string FileFullPath)
        {
            if (FileFullPath != null)
            {
                using (var client = new SftpClient("服务器ip", 端口号, "imas", "imas")) //创建连接对象
                {
                    client.Connect(); //连接
                    client.DeleteFile(FileFullPath);
                }
                return "删除成功";
            }
            else
            {
                return "请检查文件地址";
            }
        }

你可能感兴趣的:(.netcore)