文件相关操作

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

一、文件上传

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

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

        /// <summary>
        /// 上传文件
        /// </summary>
        /// <param name="file">文件</param>
        /// <param name="uploadName">上传人</param>
        /// <param name="fileClass">父文件夹</param>
        /// <returns></returns>
        [HttpPost("Post_File")]
        public async Task<string> 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 "文件为空";
            }
        }
    }
}

二、文件下载

        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="FileFullPath">文件完整路径,如/mainTest/202409/2024-09-55-14:22:55-西瓜.jpeg</param>
        /// <param name="FileName">文件名称,如2024-09-55-14:22:55-西瓜.jpeg</param>
        /// <returns></returns>
        [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);
        }

三、文件删除

        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="FileFullPath">文件完整路径,如/mainTest/202409/2024-09-55-14:22:55-西瓜.jpeg</param>
        /// <returns></returns>
        [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 "请检查文件地址";
            }
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值