.Net和.NetCore WebAPI批量上传文件以及文件操作(支持模糊匹配)
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批量上传文件以及文件操作(支持模糊匹配)的更多相关文章
- linux ftp批量上传和下载文件
一.登录ftp 输入 ftp 192.168.1.111 输入用户名:ftpuser 输入密码:aaa123 二.转到目标目录 输入:cd test ----test为文件夹 三.批量上传 输 ...
- D365,实现批量上传和下载文件的工具
这里演示下批量上传文件到D365的小程序工具,下载功能也是一样的思路跟逻辑. 通过文件名的前缀跟各个主档表的主键进行绑定来决定将附件挂在哪里. 1.上传界面. 2.查看附件上传结果.
- 利用uploadify+asp.net 实现大文件批量上传。
前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...
- uploadify文件批量上传
uploadify能够时间文件的批量上传,JS文件包下载地址,使用说明可以参考官网文档(http://www.uploadify.com/documentation/) 使用方法如下代码: $(&qu ...
- 基于jQuery很牛X的批量上传插件
上传功能应该是每个网站必备的工具之一,因此出现了出现了很多各式各样的上传插件! 本文基于个人经验和使用从插件的:交互体验,易用性,文档,美观度出发,为大家推荐三款很NX的批量上传插件! 下面三款插件的 ...
- ASP.NET MVC WebAPI实现文件批量上传
工作中学习,学习中记录~~~~~~ 最下面附上demo 任务需求:需要做一个apI接口让C#的程序调用实现批量文件的上传. 难度: 没有做过通过API上传文件的...之前做过网站前后台上传. 首先当然 ...
- .net core版 文件上传/ 支持批量上传,拖拽以及预览,bootstrap fileinput上传文件
asp.net mvc请移步 mvc文件上传支持批量上传,拖拽以及预览,文件内容校验 本篇内容主要解决.net core中文件上传的问题 开发环境:ubuntu+vscode 1.导入所需要的包:n ...
- 文件批量上传-统一附件管理器-在线预览文件(有互联网和没有两种)--SNF快速开发平台3.0
实际上在SNF里使用附件管理是非常简单的事情,一句代码就可以搞定.但我也要在这里记录一下统一附件管理器能满足的需求. 通用的附件管理,不要重复开发,调用尽量简洁. 批量文件上传,并对每个文件大小限制, ...
- antd 批量上传文件逻辑
基本步骤 通过 antd 框架的 Upload 控件,采用手动上传的方式,先选择需要上传的文件(控制文件数量以及大小),再根据所选的文件列表,循环上传,期间通过 Spin 控件提示上传中. 效果展示 ...
- 带进度条的文件批量上传插件uploadify
有时项目中需要一个文件批量上传功能时,个人认为uploadify是快速简便的解决方案. 先上效果图: 一. 下载uploadify 从官网下载uploadify的Flash版本(Flash版本免费,另 ...
随机推荐
- Pycharm2022.1.3安装教程(包含基础使用配置)
pycharm的下载安装及使用 以我的Pycharm2022.1.3为例 首先去官网下载professtional(专业版)版本 2022.1.3版本Pycharm软件 https://www.jet ...
- 解决Linux使用deepin-wine跑qq,tim打不开文件所在文件夹
前言 使用deepin-wine 跑qq,发现一个小bug 这里点击打开文件夹是没有效果的,包括在 tim 上也是这样 问题原因 出现这个问题是因为 deepin-wine 跑的 QQ,Tim 打开文 ...
- VulnHub靶机渗透实战9-vikings
本次靶机是CTF风格的靶机. 靶场地址:Vikings: 1 ~ VulnHub 网络呢还是桥接模式. Description Back to the Top A CTF machine with ...
- Linux 基础-新手必备命令
Linux 基础-新手必备命令 概述 常见执行 Linux 命令的格式是这样的: 命令名称 [命令参数] [命令对象] 注意,命令名称.命令参数.命令对象之间请用空格键分隔. 命令对象一般是指要处理的 ...
- 环境安装-Centos7.4安装及配置
环境安装-Centos7.4安装及配置 〇.资料汇总 一.虚拟机安装 1.下载地址 https://pan.baidu.com/s/1zcOp06HX4OxPdsCCGkHbXQ 提取码:7777 2 ...
- 干电池升压5V,功耗比较低
干电池升压5V,功耗10uA PW5100干电池升压5V芯片 输出电容: 所以为了减小输出的纹波,需要比较大的输出电容值.但是输出电容过大,就会使得系统的 反应时间过慢,成本也会增加.所以建议使用一个 ...
- org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException
1.问题概述 将一个 springboot 项目打成 Jar 包后,在本地使用 java -jar 命令启动服务,服务能启动成功,但是会有如下报错信息. 说明: 配置文件为外置配置文件,与 jar 处 ...
- Selenium4+Python3系列(十二) - 测试框架的设计与开发
前言 自己从未没想过能使用python来做自动化测试框架的设计.开发. 可能有人会好奇说,六哥,你怎么也用python写测试框架了? 领导说: python你也没有实际工作经验,可能就是自己自学的. ...
- 用 while 生成猜数字
import java.util.Random; import java.util.Scanner; public class zy2 { public static void main(String ...
- 大数据 - DWM层 业务实现
DWM 建表,需要看 DWS 需求. DWS 来自维度(访客.商品.地区.关键词),为了出最终的指标 ADS 需求指标 DWT 为什么实时数仓没有DWT,因为它是历史的聚集,累积结果,实时数仓中不需要 ...