.netCore3.0学习系列(三) -- 文件的上传和删除

.netCore文件上传,与.net framework 有些区别,是通过IFormFileCollection获取的!

接下来记录文件上传和删除的功能实现(不加文件类型判断,如需要可自行添加)

服务层的接口:

public interface ISrNewsApp : ITransentInject
{
    #region 上传图片
    /// <summary>
    /// 上传图片
    /// </summary>
    /// <param name="files">文件集合</param>
    /// <returns></returns>
    string UploadImage(IFormFileCollection files);
    #endregion

    #region 删除文件
    /// <summary>
    /// 删除文件
    /// </summary>
    /// <param name="imgpath">文件路径</param>
    /// <param name="operatorId">操作者ID</param>
    void DeleteImage(string imgpath, string operatorId);
    #endregion
}

接口的实现(.netcore的资源文件需要放在wwwroot目录下,不然会获取资源失败):

public class SrNewsApp: RepositoryFactory<SysDbContext, SR_News>, ISrNewsApp
{
    #region 上传图片
    /// <summary>
    /// 上传图片
    /// </summary>
    /// <param name="files">文件集合</param>
    /// <returns></returns>
    public string UploadImage(IFormFileCollection files)
    {
        string filePath = "\\files\\Images\\";
        string contentRootPath = RequestWebHelper.GetWebRootPath() + "\\wwwroot" + filePath;
        string path = string.Empty;
        foreach (var formFile in files)
        {
            if (formFile.Length > 0)
            {
                //文件名
                string fileName = formFile.FileName.Substring(formFile.FileName.LastIndexOf('\\') + 1);
                //文件类型
                string FileType = fileName.Substring(fileName.LastIndexOf('.') + 1);
                //判断路径是否存在,否则创建路径
                if (!Directory.Exists(contentRootPath))
                {
                    Directory.CreateDirectory(contentRootPath);
                }
                string newName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + "." + FileType;
                string saveFile = contentRootPath + newName;//文件路径
                using (FileStream fs = File.Create(saveFile))
                {
                    formFile.CopyTo(fs);
                    fs.Flush();
                }
                path = filePath + newName;
            }
        }
        return path;
    }
    #endregion

    #region 删除文件
    /// <summary>
    /// 删除文件
    /// </summary>
    /// <param name="imgpath">文件路径</param>
    /// <param name="operatorId">操作者ID</param>
    public void DeleteImage(string imgpath, string operatorId)
    {
        if (!string.IsNullOrEmpty(imgpath))
        {
            string[] pathList = imgpath.Split(',');
            foreach (var item in pathList)
            {
                var path = RequestWebHelper.GetWebRootPath() + "\\wwwroot" + item;
                if (File.Exists(path))
                {
                    File.Delete(path);
                }
            }
        }
    }
    #endregion
}

控制器调用接口实现文件上传和删除:

[Area("ResoureManage")]
public class SrNewsController : AdminAuthController
{
    #region 构造函数
    private readonly ISrNewsApp _srNewsApp;
    public SrNewsController(ISrNewsApp srNewsApp)
    {
        _srNewsApp = srNewsApp;
    }
    #endregion
    #region 上传图片
    [HttpPost]
    public IActionResult UploadImages()
    {
        IFormFileCollection files = Request.Form.Files;
        var src = _srNewsApp.UploadImage(files);
        var res = new DataListResult { data = src, msg = "保存表单数据即可上传成功" };
        return Content(res.ToJson());
    }
    #endregion

    #region 删除图片
    public IActionResult DeleteImage(string imgpath)
    {
        if (imgpath.IsEmpty())
        {
            return Error("不可删除空文件");
        }
        var operatorEnt = OperatorProvider.Provider.GetCurrent();
        _srNewsApp.DeleteImage(imgpath, operatorEnt.Id);
        return Success("删除成功");
    }
    #endregion
}

文件上传功能基本完成,需要文件类型判断的可自行添加。也可将文件保存和删除部分抽取出来封装,方便后续调用

文件上传能不能实现多文件上传需要大家自行测试

如果可以,返回的路径也需要修改,返回的是路径集合

版权声明:若无特殊注明,本文为《奕独客》原创,转载请保留文章出处。
本文链接:.netCore3.0学习系列(三) -- 文件的上传和删除 [https://www.yiduk.com/Core学习/17.html]
正文到此结束

热门推荐