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的更多相关文章

  1. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文

    近公司项目上在开发微信服务号的接口,需要给用户回复图片或语音或视频,这个时候就需要用到 上传下载多媒体文件接口,微信在这方面推荐采用的是开源函数库curl实现的,CURL项目包括很多版本,我主要测试的 ...

  2. asp.net 模拟CURL调用微信公共平台API 上传下载多媒体文件接口

    FormItem类 public class FormItem { public string Name { get; set; } public ParamType ParamType { get; ...

  3. 使用pcs api往免费的百度网盘上传下载文件

    百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...

  4. 简单Excel表格上传下载,POI

    一.废话 Excel表格是office软件中的一员,几乎是使用次数最多的办公软件.所以在java进行企业级应用开发的时候经常会用到对应的上传下载便利办公. 目前,比较常用的实现Java导入.导出Exc ...

  5. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  6. C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  7. FTP客户端上传下载Demo实现

    1.第一次感觉MS也有这么难用的MFC类: 2.CFtpFileFind类只能实例化一个,多个实例同时查找会出错(因此下载时不能递归),采用队列存储目录再依次下载: 3.本程序支持文件夹嵌套上传下载: ...

  8. JAVA实现上传下载共享文件

    1.上传下载共享文件需要用到jcifs,先下载相关JAR包(开源项目的源码,demo,文挡.API应有尽有) https://jcifs.samba.org/src/

  9. java web 文件上传下载

    文件上传下载案例: 首先是此案例工程的目录结构:

随机推荐

  1. docker 不能访问外网

    如果之前docker能访问外网,现在不能访问, 同时宿主机可以访问外网,那就重启docker.

  2. Centos 使用yum安装MongoDB 4.0

    1.配置MongoDB的yum源 创建yum源文件: #cd /etc/yum.repos.d #vim mongodb-org-4.0.repo 添加以下内容:(我们这里使用阿里云的源) [mngo ...

  3. Ubuntu16 搭建Git 服务器

    刚入职一个月左右,昨晚公司给培训了SVN和Git的使用.之前在研究生期间,和导师做项目就一直使用git做版本管理.想起研究生有一段时间,git总出错(秘钥都不好使了,只有某个机器生成的rsa key ...

  4. Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock32 error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"

     今天安装完带图形界面的CentOS 7后,在Terminal中运行yum安装命令时报了以下错误: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...

  5. windows 平台使用 VS2017 编译openssl源码

    windows 平台使用 VS2017 编译openssl源码 1)依赖安装 安装 perl 脚本解释器 下载 http://libevent.net/download 安装 nasm 汇编器 C:\ ...

  6. 1.nginx_add_after_body

    语法: add_before_body uri;默认值: —配置段: http, server, location发起一个子请求,请求给定的uri,并且将内容追加到主题响应的内容之前. 语法: add ...

  7. springdata 动态查询之分页

  8. mapper.xml 的配置

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...

  9. 【pytorch】关于Embedding和GRU、LSTM的使用详解

    1. Embedding的使用 pytorch中实现了Embedding,下面是关于Embedding的使用. torch.nn包下的Embedding,作为训练的一层,随模型训练得到适合的词向量. ...

  10. Glide和Picasso的区别

    首先简单的介绍下两个库的出身: Picasso是Square公司出品的一款非常优秀的开源图片加载库Glide是由Google开发,基于 Picasso,依然有保存了Picasso的简洁风格,但是在此做 ...