1.Net

/// <summary>
/// 上传文件
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult ExportFile()
{
UploadFile _uploadFile = new UploadFile();
try
{
var file = Request.Files[0]; //获取选中文件
string fileNameEx = Path.GetExtension(file.FileName);//获取扩展名
string fileNameTrue = Path.GetFileNameWithoutExtension(file.FileName);// 获取文件名不含扩展名
string imgType = Configs.GetValue("ImgType").ToUpper(); if (file == null || string.IsNullOrEmpty(file.FileName) || file.ContentLength == 0)
{
_uploadFile.code = -1;
_uploadFile.data = new { src = "" };
_uploadFile.msg = "上传出错!未检测到文件";
return Json(_uploadFile);
} if (!imgType.Contains(fileNameEx.ToUpper().Replace(".", "")))
{
_uploadFile.code = -1;
_uploadFile.data = new { src = "" };
_uploadFile.msg = "上传出错!图片格式只支持"+ imgType;
return Json(_uploadFile);
} string filePathName = string.Empty;
//定义本地路径位置
string localPath = Server.MapPath("~/Upload/ArticleUploadImg/");
string tmpName = Server.MapPath("~/Upload/ArticleUploadImg/");
var tmp = file.FileName;
var tmpIndex = 0; //判断是否存在相同文件名的文件 相同累加1继续判断
while (System.IO.File.Exists(tmpName + tmp))
{
tmp = fileNameTrue + "_" + ++tmpIndex + fileNameEx;
} //不带路径的最终文件名
filePathName = tmp; if (!Directory.Exists(localPath))
Directory.CreateDirectory(localPath);
file.SaveAs(Path.Combine(tmpName, filePathName)); //保存图片(文件夹) _uploadFile.code = 0;
_uploadFile.data = new { src = Path.Combine("/Upload/ArticleUploadImg/", filePathName), title = Path.GetFileNameWithoutExtension(filePathName) };
_uploadFile.msg = "上传成功";
return Json(_uploadFile);
}
catch (Exception ex)
{
return Json(_uploadFile, JsonRequestBehavior.AllowGet);
}
}

2. NetCore

/// <summary>
/// 文件上传
/// </summary>
/// <returns></returns>
[HttpPost, Route("attachment/Upload")]
public IHttpResponseResult UploadFile()
{
const string logName = "UploadFile"; try
{
var files = HttpContext.Current.Request.Files; //接收
if (files.Count <= 0) return Fail(logName, "未获取到文件"); for (var i = 0; i < files.Count; i++)
{
var file = files[i];
if (file == null) continue;
if (file.ContentLength > 1024 * 1024 * 5)
{
return Fail(logName, $"文件({file.FileName})大小超过5M", ErrorCode.FileTooLarge);
}
} var fileFolderId = Guid.NewGuid(); //重命名
for (var i = 0; i < files.Count; i++)
{
var file = files[i];
if (file == null) continue; var ext = Path.GetExtension(file.FileName).Replace(".", ""); //文件后缀名 //判断是否是运行上传的图片格式
if (Array.IndexOf(AppConfigs.FileType.Split('|'), ext) == -1)
{
return Fail(logName, $"({file.FileName})文件类型不支持", ErrorCode.FileTypeNotSupport);
} var fileFolderPath = $"{HostingEnvironment.MapPath("/")}{AttachmentsBasePath}/{fileFolderId}/"; //重命名 if (!Directory.Exists(fileFolderPath))
{
Directory.CreateDirectory(fileFolderPath);
} var filePath = Path.Combine(fileFolderPath, file.FileName);
file.SaveAs(filePath); //保存文件
} return Success(logName, fileFolderId, "文件上传成功");
}
catch (Exception ex)
{
return Fail(logName, $"上传文件异常\n{ex.ToExceptionString()}");
}
}

3.文件操作

///<summary>
/// 文件操作帮助类
/// </summary>
public static class FileHelper
{
/// <summary>
/// 根目录
/// </summary>
private static readonly string RootPath = AppDomain.CurrentDomain.BaseDirectory; /// <summary>
/// 读取文件夹下的文件
/// </summary>
/// <param name="fileFolderName">文件夹名称</param>
/// <param name="path">根目录下的相对路径</param>
/// <returns></returns>
public static Dictionary<string, byte[]> ReadBatchFile(string fileFolderName, string path)
{
var fileDic = new Dictionary<string, byte[]>();
var fileFolderPath = GetFolderPath(fileFolderName, path);
if (fileFolderPath.IsNullOrEmpty())
{
return fileDic;
} var filesPath = GetAllFiles(fileFolderPath);
foreach (var filePath in filesPath)
{
var fileName = filePath.Split('\\').Last();
fileDic.Add(fileName, File.ReadAllBytes(filePath));
} return fileDic;
} /// <summary>
/// 删除文件夹
/// </summary>
/// <param name="fileFolderName">文件夹名称</param>
/// <param name="path">根目录下的相对路径</param>
/// <returns></returns>
public static void DeleteDirectory(string fileFolderName, string path)
{
var fileFolderPath = GetFolderPath(fileFolderName, path);
if (fileFolderPath.IsNullOrEmpty()) return; //先删除目录下的所有文件
var filesPath = GetAllFiles(fileFolderPath);
foreach (var filePath in filesPath)
{
File.Delete(filePath);
} //再删除目录
Directory.Delete(fileFolderPath);
} /// <summary>
/// 根据文件夹的相对路径获取绝对路径
/// </summary>
/// <param name="fileFolderName">文件夹名称</param>
/// <param name="path">根目录下的相对路径</param>
/// <returns></returns>
private static string GetFolderPath(string fileFolderName, string path)
{
return Directory.GetDirectories($"{RootPath}/{path}", fileFolderName,
SearchOption.TopDirectoryOnly).FirstOrDefault();
} /// <summary>
/// 获取文件路径下的所有文件
/// </summary>
/// <param name="fileFolderPath"></param>
/// <returns></returns>
private static IEnumerable<string> GetAllFiles(string fileFolderPath)
{
return Directory.GetFiles(fileFolderPath, "*");
} /// <summary>
/// 读取单个文件
/// </summary>
/// <param name="fileName"></param>
/// <param name="path"></param>
/// <returns></returns>
public static byte[] ReadSingleFile(string fileName, string path)
{
var filePath = GetExactFilePath(fileName, path);
return filePath.IsNullOrEmpty() ? null : File.ReadAllBytes(filePath);
} /// <summary>
/// 精确获取文件绝对路径(需要后缀名)
/// </summary>
/// <param name="fileName">文件名.后缀名</param>
/// <param name="path">相对路径</param>
/// <returns></returns>
private static string GetExactFilePath(string fileName, string path)
{
return Directory.GetFiles($"{RootPath}/{path}", fileName, SearchOption.AllDirectories).FirstOrDefault();
} /// <summary>
/// 删除文件
/// </summary>
/// <param name="fileName">文件名称</param>
/// <param name="path">根目录下的相对路径</param>
/// <returns></returns>
public static void DeleteFile(string fileName, string path)
{
var filePath = GetExactFilePath(fileName, path);
if (!filePath.IsNullOrEmpty()) File.Delete(filePath);
} /// <summary>
/// 根据文件名片段模糊匹配获取文件路径
/// </summary>
/// <param name="fileName">文件名片段</param>
/// <param name="path">相对路径</param>
/// <returns></returns>
public static string[] GetFuzzyFilePath(string fileName, string path)
{
return Directory.GetFiles($"{RootPath}/{path}", $"*{fileName}*.*", SearchOption.AllDirectories);
}
}

.Net和.NetCore WebAPI批量上传文件以及文件操作(支持模糊匹配)的更多相关文章

  1. linux ftp批量上传和下载文件

    一.登录ftp 输入 ftp 192.168.1.111 输入用户名:ftpuser 输入密码:aaa123 二.转到目标目录 输入:cd   test   ----test为文件夹 三.批量上传 输 ...

  2. D365,实现批量上传和下载文件的工具

    这里演示下批量上传文件到D365的小程序工具,下载功能也是一样的思路跟逻辑. 通过文件名的前缀跟各个主档表的主键进行绑定来决定将附件挂在哪里. 1.上传界面. 2.查看附件上传结果.

  3. 利用uploadify+asp.net 实现大文件批量上传。

    前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...

  4. uploadify文件批量上传

    uploadify能够时间文件的批量上传,JS文件包下载地址,使用说明可以参考官网文档(http://www.uploadify.com/documentation/) 使用方法如下代码: $(&qu ...

  5. 基于jQuery很牛X的批量上传插件

    上传功能应该是每个网站必备的工具之一,因此出现了出现了很多各式各样的上传插件! 本文基于个人经验和使用从插件的:交互体验,易用性,文档,美观度出发,为大家推荐三款很NX的批量上传插件! 下面三款插件的 ...

  6. ASP.NET MVC WebAPI实现文件批量上传

    工作中学习,学习中记录~~~~~~ 最下面附上demo 任务需求:需要做一个apI接口让C#的程序调用实现批量文件的上传. 难度: 没有做过通过API上传文件的...之前做过网站前后台上传. 首先当然 ...

  7. .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件

    asp.net mvc请移步 mvc文件上传支持批量上传,拖拽以及预览,文件内容校验 本篇内容主要解决.net core中文件上传的问题  开发环境:ubuntu+vscode 1.导入所需要的包:n ...

  8. 文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)--SNF快速开发平台3.0

    实际上在SNF里使用附件管理是非常简单的事情,一句代码就可以搞定.但我也要在这里记录一下统一附件管理器能满足的需求. 通用的附件管理,不要重复开发,调用尽量简洁. 批量文件上传,并对每个文件大小限制, ...

  9. antd 批量上传文件逻辑

    基本步骤 通过 antd 框架的 Upload 控件,采用手动上传的方式,先选择需要上传的文件(控制文件数量以及大小),再根据所选的文件列表,循环上传,期间通过 Spin 控件提示上传中. 效果展示 ...

  10. 带进度条的文件批量上传插件uploadify

    有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...

随机推荐

  1. 自学 TypeScript 第二天 编译选项

    前言: 昨天我们学习了 TS 的数据类型,不知道大家回去以后练习没练习,如果你练习了一定会发现一个问题,我们的 TS 好像和 JS 不太一样 JS 写完之后直接就可以放到页面上,就可以用了,而我们的 ...

  2. WINDOWS下对NIGNX日志文件进行限制

    首先接到这个任务,发现nginx的日志限制更多的都是在Linux下做的,找了半天,也没找到能直接通过nginx.conf更改体现到日志限制上的. 最后决定直接通过bat脚本,来对nginx的日志进行分 ...

  3. esp-01和esp-01s烧录固件和程序

    准备工具 USB-TTL 杜邦线若干 esp-01s烧录固件 我烧录的固件是 micropython, 使用的软件是 uPyCraft esp-01s烧录固件接线方法: esp-01s usb-ttl ...

  4. AI绘画提示词创作指南:DALL·E 2、Midjourney和 Stable Diffusion最全大比拼 ⛵

    作者:韩信子@ShowMeAI 深度学习实战系列:https://www.showmeai.tech/tutorials/42 自然语言处理实战系列:https://www.showmeai.tech ...

  5. Boolean.getBoolean() 与 Boolean.parseBoolean()

    1. 问题回顾 当在不了解 Boolean 中的 getBoolean() 方法与 parseBoolean() 方法的区别时,在使用过程中就会出现不明所以的bug. 比如如下使用情况: // isA ...

  6. Agileboot 1.6.0 发布啦 - 一款致力于规范/精简/可维护 的Springboot + Vue3的快速开发脚手架

    平台简介 AgileBoot是一套开源的全栈精简快速开发平台,毫无保留给个人及企业免费使用.本项目的目标是做一款精简可靠,代码风格优良,项目规范的小型开发脚手架. 适合个人开发者的小型项目或者公司内部 ...

  7. python虚拟环境和venv的使用

    目录 1.环境与虚拟环境 2.查看帮助 3.--system-site-package 命令 4.创建虚拟环境 5.激活/关闭虚拟环境 6.保存和复制虚拟环境 7.改变虚拟环境所指向的真实python ...

  8. 使用linux的ffmpeg进行B站直播推流

    很久之前买了个友善的开发板R2S,一直在家吃灰.最近看到网上有用ffmpeg进行直播推流的案例,想把吃灰的的开发板利用起来,于是有了这篇教程. 第一步:安装ffmpeg sudo apt update ...

  9. Jmeter 之bzm- Concurrency Thread Group 压测

    bzm- Concurrency Thread Group  并发线程组代替 jp@gc - Stepping Thread Group线程组. 1.  下载jmeter-plugins-manage ...

  10. 【博学谷学习记录】超强总结,用心分享|前端CSS总结(一)

    CSS总结(一) shift+alt,选中多行 外链式 <link rel="stylesheet" href="./my.css"> 1 选择器 ...