Image 上传下载Api
1.配置
"UploadConfig": {
// 自定义存放位置,无需放到站点内部
"Path": "C:\\Users\\kxy\\Desktop\\images\\Upload",
// 配置id对应的子目录
"Items": [
{
"id": "CeshiImg",
"path": "CeshiImg"
}
]
}
定义类,用来接住配置
public class UploadConfig
{
public string Path { get; set; }
public List<Item> Items { get; set; }
}
public class Item
{
public string id { get; set; }
public string path { get; set; }
}
读取配置,需要在 Startup 的 ConfigureServices 添加
services.AddOptions();
services.Configure<UploadConfig>(Configuration.GetSection("UploadConfig"));
2.接口
[Route("api/[controller]")]
[ApiController]
public class UploadController : ControllerBase
{
UploadConfig configs = null;
public UploadController(IOptions<UploadConfig> option)//构造函数
{
configs = option.Value;
}
/// <summary>
/// 上传文件
/// </summary>
/// <param name="id">子目录id</param>
/// <param name="files">文件</param>
/// <returns></returns>
[HttpPost("{id}")]
public async Task<IActionResult> File(string id, [FromForm]List<IFormFile> files)
{
if (!SuccessConfig(id))
return Ok(new { Msg = "配置信息不存在" });
var con = configs.Items.Find(p => p.id == id);
// 保存文件夹
var saveFolder = Path.Combine(configs.Path, con.path);
if (!Directory.Exists(saveFolder))
Directory.CreateDirectory(saveFolder);
var LPath = new List<string>();
try
{
foreach (var file in files)
{
// 相对路径
var relaPath = Path.Combine(con.path, RanFileNo(id) + "." + GetFileSuf(file.FileName));
using (var stream = new FileStream(Path.Combine(configs.Path, relaPath), FileMode.Create))
{
await file.CopyToAsync(stream);
}
LPath.Add(relaPath);
}
}
catch (Exception ex)
{
throw ex;
}
return Ok(new { count = files.Count, LPath });
}
/// <summary>
/// 获取文件流
/// </summary>
/// <param name="relaPath">相对路径</param>
/// <returns></returns>
[HttpGet("Get")]
public async Task<IActionResult> Get([FromQuery]string relaPath)
{
var image = System.IO.File.OpenRead(Path.Combine(configs.Path,relaPath));
return File(image, "image/jpeg");
}
/// <summary>
/// 检查配置
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private bool SuccessConfig(string id)
{
if (configs == null || configs.Path == "" || configs.Path == null || configs.Items == null)
return false;
var con = configs.Items.Find(p => p.id == id);
if (con == null || con.path == "" || con.path == "")
return false;
return true;
}
/// <summary>
/// 获取随机路径
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
private string RanFileNo(string id)
{
return id + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + (new Random(Guid.NewGuid().GetHashCode())).Next(, ).ToString();
}
/// <summary>
/// 获取文件后缀
/// </summary>
/// <param name="filename"></param>
/// <returns></returns>
private string GetFileSuf(string filename)
{
var le = filename.Split('.').Length;
if (le == )
throw new Exception("获取文件名后缀失败");
return filename.Split('.')[le - ];
}
}
3.Postman 调用接口
1)上传

2)获取

Image 上传下载Api的更多相关文章
- asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文
近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的 ...
- asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文件接口
FormItem类 public class FormItem { public string Name { get; set; } public ParamType ParamType { get; ...
- 使用pcs api往免费的百度网盘上传下载文件
百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...
- 简单Excel表格上传下载,POI
一.废话 Excel表格是office软件中的一员,几乎是使用次数最多的办公软件.所以在java进行企业级应用开发的时候经常会用到对应的上传下载便利办公. 目前,比较常用的实现Java导入.导出Exc ...
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- FTP客户端上传下载Demo实现
1.第一次感觉MS也有这么难用的MFC类: 2.CFtpFileFind类只能实例化一个,多个实例同时查找会出错(因此下载时不能递归),采用队列存储目录再依次下载: 3.本程序支持文件夹嵌套上传下载: ...
- JAVA实现上传下载共享文件
1.上传下载共享文件需要用到jcifs,先下载相关JAR包(开源项目的源码,demo,文挡.API应有尽有) https://jcifs.samba.org/src/
- java web 文件上传下载
文件上传下载案例: 首先是此案例工程的目录结构:
随机推荐
- win 10 精简组件列表
轻松访问工具 操作中心 应用程序虚拟化(App-V) Telemetry Client (Asimov)(遥测) Assigned Access(按需访问) 自动播放 网络后台传输 备份 生物识别服务 ...
- Autoit 实现word拆分页解析 (python同理)
Autoit 实现word拆分页解析 (python同理) 背景 之前一直在做相关工作,由于没有找到解决最佳解决方案,老办法思路是 python先将word 转成pdf,按照页码 提取文字,从而实现w ...
- Mysql数据库引擎介绍--转载
引用博文链接:https:/www.cnblogs.com/zhangjinghe/p/7599988.html MYSQL数据库引擎区别详解 数据库引擎介绍 MySQL数据库引擎取决于MySQL在安 ...
- HTML HTML5 新特性
一.语义化标签 语义化标签 为页面提供了更好的页面结构. 描述 属性 <header></header> 定义文档的头部区域 <footer></foote ...
- 以API方式调用C# dll,使用OneNote2013 sp1实现OCR识别本地图片
http://www.cnblogs.com/Charltsing/p/OneNoteOCRAPI.html OneNote2013 OCR API调用使用说明2019.4.17 使用说明:1.安装干 ...
- windows 分页缓冲池 非分页缓冲池
最近在windows server 2012机器上在做性能测试时,发现8G物理内存,内存使用率占到了90%多,在“进程”列表中所有进程内存相加才2个多G,同时任务管理器->“性能”标签一项中,非 ...
- vue-cli3.0 flexible&px2rem 解决第三方ui组件库样式问题
背景 在项目使用lib-flexible还有postcss-px2rem实现移动端适配,当我们引入第三方的样式组件库,发现一个问题.那些组件库的样式都变小了. 问题原因 变小的主要原因是第三库 css ...
- JavaScript的数据结构和算法
所有JavaScript对象都有hasOwnProperty(value)的方法,用来返回一个表明对象是不是具有这个value Key值属性的布尔值. javaScript的方法 具有delete的方 ...
- Git 本地保存账号密码的删除或修改
转自:https://blog.csdn.net/lwqldsyzx/article/details/61228299 Git 本地拉取代码时需要输入用户名和密码时,会自动将用户名密码信息保存起来.需 ...
- 小程序 canvas画本 地图片
ctx.drawImage('../../../../page/home/resources/pic/che_logo.png', 10, 435, 50,50); 本地图片要根路径