core webapi缩略图_.Net Core WebApi上传图片的两种方式
我这边主要是为了上传图片,话不多说,上代码。
方式一:通过Form表单上传
后端:
///
/// 上传图片,通过Form表单提交
///
///
[Route("Upload/FormImg")]
[HttpPost]
public ActionResult UploadImg(List files)
{
if (files.Count<1)
{
return Error("文件为空");
}
//返回的文件地址
List filenames = new List();
var now = DateTime.Now;
//文件存储路径
var filePath = string.Format("/Uploads/{0}/{1}/{2}/", now.ToString("yyyy"), now.ToString("yyyyMM"), now.ToString("yyyyMMdd"));
//获取当前web目录
var webRootPath = _hostingEnvironment.WebRootPath;
if (!Directory.Exists(webRootPath + filePath))
{
Directory.CreateDirectory(webRootPath + filePath);
}
try
{
foreach (var item in files)
{
if (item != null)
{
#region 图片文件的条件判断
//文件后缀
var fileExtension = Path.GetExtension(item.FileName);
//判断后缀是否是图片
const string fileFilt = ".gif|.jpg|.jpeg|.png";
if (fileExtension == null)
{
break;
//return Error("上传的文件没有后缀");
}
if (fileFilt.IndexOf(fileExtension.ToLower(), StringComparison.Ordinal) <= -1)
{
break;
//return Error("请上传jpg、png、gif格式的图片");
}
//判断文件大小
long length = item.Length;
if (length > 1024 * 1024 * 2) //2M
{
break;
//return Error("上传的文件不能大于2M");
}
#endregion
var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串
var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
var saveName = strDateTime + strRan + fileExtension;
//插入图片数据
using (FileStream fs = System.IO.File.Create(webRootPath + filePath + saveName))
{
item.CopyTo(fs);
fs.Flush();
}
filenames.Add(filePath + saveName);
}
}
return Success(filenames);
}
catch (Exception ex)
{
//这边增加日志,记录错误的原因
//ex.ToString();
return Error("上传失败");
}
}
我这里主要是为了提交图片数据,所以有比较多的对图片文件的条件判断,这里可以根据需求,自行调整。包括文件的存储方式。
前端:
.Net Core WebApi图片上传
通过form表单提交
action="https://localhost:44376/Upload/FormImg">
上传的图片,返回的地址
//前端第一种提交方式
function uplpadfile(){
//获取表单的数据
var formdata
var file = $("#files").get(0);
var files = file.files;
var formdata = new FormData();
for (var i = 0; i < files.length; i++) {
formdata.append("files", files[i]);
}
$.ajax({
type:'Post',
data:formdata,
contentType: false,
processData: false,
url:"https://localhost:44376/Upload/FormImg",
success:function(result){
if (result.Success) {
var imglist =result.Data;
for(var i in imglist){
$("#imglist").append('');
}
}else{
alert('提交失败,重新尝试提交');
}
}
})
};
除了上传写的提交方式,另外还有两种提交数据的方式:
方式二:
function uplpadfile(){
//获取表单的数据
var formdata = new FormData(document.getElementById("myform"));
$.ajax({
type:'Post',
data:formdata,
contentType: false,
processData: false,
url:"https://localhost:44376/Upload/FormImg",
success:function(result){
if (result.Success) {
var imglist =result.Data;
for(var i in imglist){
$("#imglist").append('');
}
}else{
alert('提交失败,重新尝试提交');
}
}
})
};
方式三:
function uplpadfile(){
$("#myform").ajaxSubmit(function(result){
if (result.Success) {
var imglist =result.Data;
for(var i in imglist){
$("#imglist").append('');
}
}else{
alert('提交失败,重新尝试提交');
}
});
};
前端这里,要注意几点:
1、Form表中一定要加上 enctype="multipart/form-data" 标签
2、文件上传的 file 控件上,如果要一次上传多张图片,需要加上 multiple 标签
3、方式一中: formdata.append("files", files[i]) 的 files 必须和接口接受文件的参数名一致
4、方式二和方式三中: 中的name 必须和接口接受文件的参数名一致
通过Form提交文件的方式总结:
前端提交文件的三种方式都可以使用。
如果文件需要和表单中其他数据一起提交,可以使用方式二和方式三。
如果只要单独提交一个文件数据,可以使用方式一。
====================华丽的分割线====================
方式二:通过Base64字符上传
后端:
///
/// 文件上传,Base64
///
/// Base64
/// 文件名
///
[HttpPost]
[Route("Upload/Base64")]
public ActionResult UploadBase64(string fileBase64, string fileName)
{
byte[] bytes = fileBase64.ToBytes_FromBase64Str();
var fileExtension = Path.GetExtension(fileName);
var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串
var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
var saveName = strDateTime + strRan + fileExtension;
var savePath = "Upload/Img/" + DateTime.Now.ToString("yyyyMMdd") + "/" + saveName;
string filePath = "https://oss.tiaobox.com/" + savePath;
try
{
//将文件上传到阿里云oss
using (MemoryStream m = new MemoryStream(bytes))
{
var client = new OssClient(aliyunconfig.EndPoint, aliyunconfig.AccessKeyID, aliyunconfig.AccessKeySecret);
PutObjectRequest _objRequest = new PutObjectRequest(aliyunconfig.BucketName, savePath, m);
client.PutObject(_objRequest);
}
return Success(filePath);
}
catch (Exception ex)
{
WriteSysLog(ex.ToString(), Entity.Base_SysManage.EnumType.LogType.接口调用异常);
return Error("上传失败!");
}
}
这个后端方法,每次只能上传一个文件,前端需要把文件转成Base64的字符提交。
这里保存数据的方式,是保存到阿里云的OSS上,也可以采用上面的方法,保存的本地。最终都是返回文件的路径。
前端:
.Net Core WebApi图片上传
通过文件转为Base64字符提交
$("#basefile").change(function(){
var basefile = base64(document.getElementById("basefile"));
})
//上传文件
function updateBackground(filename,imgurl){
//提交前,去除格式标记
imgurl = imgurl.replace("data:image/jpeg;base64,", "").replace("data:image/png;base64,", "").replace("data:image/jpg;base64,", "").replace("data:image/gif;base64,", "").replace("data:image/bmp;base64,", "");
// urlElement.innerHTML = imgurl;
var businessParam = {
fileBase64:imgurl,
fileName:filename
};
$.ajax({
url:'https://localhost:44376/Upload/Base64',
data:businessParam,
type:'post',
dataType:'json',
success:function(result){
if (result.Success) {
alert("上传成功");
}else{
alert("上传失败");
}
},
error: function(data) {
alert("error:"+data.Error);
}
})
}
//文件转为Base64
function base64(file) {
if (typeof (FileReader) === 'undefined') {
alert("抱歉,你的浏览器不支持 FileReader,请使用现代浏览器操作!");
}
var reader = new FileReader();
var pos = file.files[0].name.lastIndexOf(".");
var type = file.files[0].name.substring(pos + 1);
//判断文件格式
if (type.toLowerCase() != "png" && type.toLowerCase() != 'jpg' && type.toLowerCase() != 'jpeg' && type.toLowerCase() != 'gif' && type.toLowerCase() != 'bmp') {
alert("格式错误,请上传'png、jpg、jpeg、bmp、gif'格式文件");
return;
}
reader.onloadend = (
function(e) {
imgurl = e.target.result;
updateBackground(file.files[0].name,imgurl);
}
);
// Read the file
reader.readAsDataURL(file.files[0]);
}
这里需要注意的是文件在前端转成Base64字符后,需要在字符的前面去掉文件的格式标签。不然到后端会无法正常读取Base64的字符。
或者在后端接收数据后,做处理也可以。
补充:
_hostingEnvironment的定义
private readonly IHostingEnvironment _hostingEnvironment;
public UploadController(IHostingEnvironment hostingEnvironment,IOptions _aliyunconfig)
{
_hostingEnvironment = hostingEnvironment;
aliyunconfig = _aliyunconfig.Value;
}
ToBytes_FromBase64Str 是对 String 类的方法扩展
public static byte[] ToBytes_FromBase64Str(this string base64Str)
{
return Convert.FromBase64String(base64Str);
}
如果有什么错误或者欠缺的地方,欢迎指正,互相学习。
文章参考,里面还有讲述关于大文件的上传:
https://www.cnblogs.com/seabluescn/p/9229760.html
转:https://www.cnblogs.com/leoxuan/articles/11087121.html
core webapi缩略图_.Net Core WebApi上传图片的两种方式相关推荐
- laravel 图片流_laravel实现上传图片的两种方式小结
第一:是laravel里面自带的上传方式(写在接口里面的) function uploadAvatar(Request $request) { $user_id = Auth::id(); $avat ...
- 第十二节:WebApi自动生成在线Api文档的两种方式
一. WebApi自带生成api文档 1. 说明 通过观察,发现WebApi项目中Area文件夹下有一个HelpPage文件夹,如下图,该文件夹就是WebApi自带的生成Api的方式,如果该文件夹没了 ...
- webapi输出炜json_web Api 返回json 的两种方式
web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...
- python舵机控制程序_树莓派PWM控制舵机的两种方式
PWM控制舵机简介 通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的.伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上.伺服电机(舵 ...
- mysql数据存储方式_数据存储在mysql的两种方式
数据存储在mysql的两种方式 发布时间:2020-05-12 16:16:25 来源:亿速云 阅读:250 作者:三月 下文主要给大家带来数据存储在mysql的两种方式,希望这些内容能够带给大家实际 ...
- 十进制小数化为二进制小数的方法是什么_十进制转成二进制的两种方式
第一种:用2整除的方式. 用2整除十进制整数,得到一个商和余数:再用2去除商,又会得到一个商和余数,如此重复,直到商为小于1时为止,然后把先得到余数作为二进制数的低位有效位,后得到的余数作为二进制数的 ...
- 运用python的方式_对Python使用mfcc的两种方式详解
1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" ...
- Android上传图片的两种方式
参考:https://www.jianshu.com/p/f47943880cea
- php虚线_实现css虚线样式的两种方式:dotted和dashed(实例)
css虚线边框怎么做?html虚线边框设置一般会想到border的solid,html网页布局中solid用的概率最高了,要有css虚线的效果还可以用图片做背景,但是不推荐,尽量使用css虚线样式做这 ...
最新文章
- oschina多媒体工具
- java解析纯真IP数据库
- 看动画学算法之:linkedList
- WebStorm 常用功能的使用技巧分享
- Sentinel(十五)之在生产环境中使用 Sentinel
- idea 启动 springBoot debug很慢,正常启动很快是什么原因
- 作者:钱卫宁,华东师范大学数据科学与工程研究院教授、博士生导师。
- TextBox控件的DataBindings属性
- php xampp 安装yaf,在apache中,yaf访问yaf,apache会异常退出是为何?
- 不生效_离婚协议签订后,对方反悔不生效,但证据价值巨大!
- 人脸服务器如何与门禁系统对接,人脸识别门禁与自动门接线图
- 2019年互联网裁员名单
- html 标签英文全称,html标签英文全称
- 为什么穷人越穷,富人越富?
- 【Git从入门到精通】Git入门
- 百度网盘ubuntu版deb包安装
- 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局
- CSS实现当鼠标移入或者移出时实现动画过渡效果
- Excel的图表:组成元素、图表类型与用途、图表可视化大全
- 近200篇机器学习&amp;深度学习资料分享(含各种文档,视频,源码等)
热门文章
- 非常牛逼的SQL语句
- 温州大学计算机网络,数据通信与计算机网络(温州大学)实验四 - 运输层TCP和UDP协议分析.doc...
- 装车机器人_智造春天脚步近 青岛这家机器人公司着手打造模块化、标准化技术平台...
- php excel中解析显示html代码_骑士cms从任意文件包含到远程代码执行漏洞分析
- python数据挖掘工程师待遇_数据挖掘工程师岗位的具体职责
- devc代码补全没效果_从零开始写文本编辑器(二十八):自动补全(上)
- php迭代什么意思,PHP中迭代变量的坑
- java解析xml实例_在java中使用dom解析xml的示例分析
- java更新无法正常安装_Java无法安装
- html自定义列表第三层嵌套,【微信小程序】关于微信小程序多层嵌套渲染列表以及嵌套列表中数据的获取...