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 文件上传下载
文件上传下载案例: 首先是此案例工程的目录结构:
随机推荐
- Git clone远程目录443:Timed out 问题(go get)
现象: 在cmd中用go get -u github.com/kataras/iris ,提示:443:Timed out 于是在 git bash 中 git clone https://g ...
- RecyclerView的Item的单击事件
RecyclerView 的每个Item的点击事件并没有像ListView一样封装在组件中,需要Item的单击事件时就需要自己去实现,在Adapter中为RecyclerView添加单击事件参考如下: ...
- Ubuntu 18.04 安装 Apache, MySQL, PHP7, phpMyAdmin
https://blog.csdn.net/sanve/article/details/80770675
- 在Winform开发框架中下拉列表绑定字典以及使用缓存提高界面显示速度
在我们开发Winform界面的时候,往往需要绑定数据字典操作,也就是绑定一些下拉列表或者一些列表显示等,以便我们方便选择数据操作,常见的字典绑定操作就是对下拉列表的处理,本篇随笔是基于DevExpre ...
- Visual Studio 2019 正式版 更新内容
大早上更新了Visual Studio 2019, 试用一下 一.界面改变 1.项目创建界面 首先启动界面改变就不说了,创建项目的界面做了较大改变,感觉在向vs for mac 靠拢 ,而后者感觉像x ...
- C# .NET 0命令行安装Windows服务程序
设计原则:万物皆对象 背景:在我的项目中,即需要与硬件通过Socket连接通讯,又需要给App提供Wcf服务操作接口,虽然都完成了,但是却是一个控制台(虽然我很喜欢控制台,因为它简单易用),把它放到服 ...
- Vue (一) --- vue.js的快速入门使用
=-----------------------------------把现在的工作做好,才能幻想将来的事情,专注于眼前的事情,对于尚未发生的事情而陷入无休止的忧虑之中,对事情毫无帮助,反而为自己凭添 ...
- 网页分享到facebook
一.在网页头部加入如下代码: <meta property="og:url" class="fb_url" content="分享url&quo ...
- MVC和MVVM
MVC和MVVM的qu'bie 1. Mvvm定义MVVM是Model-View-ViewModel的简写.即模型-视图-视图模型.[模型]指的是后端传递的数据.[视图]指的是所看到的页面.[视图模型 ...
- kettle变量(param命名参数2)
接arg参数: 通过命令行进行变量赋值和引用 定义跟界面定义相同: 赋值(转换): 运行命令到kettle目录下 pan /file:path "/param:aa="bb&quo ...