我这边主要是为了上传图片,话不多说,上代码。

方式一:通过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上传图片的两种方式相关推荐

  1. laravel 图片流_laravel实现上传图片的两种方式小结

    第一:是laravel里面自带的上传方式(写在接口里面的) function uploadAvatar(Request $request) { $user_id = Auth::id(); $avat ...

  2. 第十二节:WebApi自动生成在线Api文档的两种方式

    一. WebApi自带生成api文档 1. 说明 通过观察,发现WebApi项目中Area文件夹下有一个HelpPage文件夹,如下图,该文件夹就是WebApi自带的生成Api的方式,如果该文件夹没了 ...

  3. webapi输出炜json_web Api 返回json 的两种方式

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  4. python舵机控制程序_树莓派PWM控制舵机的两种方式

    PWM控制舵机简介 通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的.伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上.伺服电机(舵 ...

  5. mysql数据存储方式_数据存储在mysql的两种方式

    数据存储在mysql的两种方式 发布时间:2020-05-12 16:16:25 来源:亿速云 阅读:250 作者:三月 下文主要给大家带来数据存储在mysql的两种方式,希望这些内容能够带给大家实际 ...

  6. 十进制小数化为二进制小数的方法是什么_十进制转成二进制的两种方式

    第一种:用2整除的方式. 用2整除十进制整数,得到一个商和余数:再用2去除商,又会得到一个商和余数,如此重复,直到商为小于1时为止,然后把先得到余数作为二进制数的低位有效位,后得到的余数作为二进制数的 ...

  7. 运用python的方式_对Python使用mfcc的两种方式详解

    1.Librosa import librosa filepath = "/Users/birenjianmo/Desktop/learn/librosa/mp3/in.wav" ...

  8. Android上传图片的两种方式

    参考:https://www.jianshu.com/p/f47943880cea

  9. php虚线_实现css虚线样式的两种方式:dotted和dashed(实例)

    css虚线边框怎么做?html虚线边框设置一般会想到border的solid,html网页布局中solid用的概率最高了,要有css虚线的效果还可以用图片做背景,但是不推荐,尽量使用css虚线样式做这 ...

最新文章

  1. oschina多媒体工具
  2. java解析纯真IP数据库
  3. 看动画学算法之:linkedList
  4. WebStorm 常用功能的使用技巧分享
  5. Sentinel(十五)之在生产环境中使用 Sentinel
  6. idea 启动 springBoot debug很慢,正常启动很快是什么原因
  7. 作者:钱卫宁,华东师范大学数据科学与工程研究院教授、博士生导师。
  8. TextBox控件的DataBindings属性
  9. php xampp 安装yaf,在apache中,yaf访问yaf,apache会异常退出是为何?
  10. 不生效_离婚协议签订后,对方反悔不生效,但证据价值巨大!
  11. 人脸服务器如何与门禁系统对接,人脸识别门禁与自动门接线图
  12. 2019年互联网裁员名单
  13. html 标签英文全称,html标签英文全称
  14. 为什么穷人越穷,富人越富?
  15. 【Git从入门到精通】Git入门
  16. 百度网盘ubuntu版deb包安装
  17. 基于ArcGIS Pro、Python、USLE、INVEST模型等多技术融合的生态系统服务构建生态安全格局
  18. CSS实现当鼠标移入或者移出时实现动画过渡效果
  19. Excel的图表:组成元素、图表类型与用途、图表可视化大全
  20. 近200篇机器学习&amp;深度学习资料分享(含各种文档,视频,源码等)

热门文章

  1. 非常牛逼的SQL语句
  2. 温州大学计算机网络,数据通信与计算机网络(温州大学)实验四 - 运输层TCP和UDP协议分析.doc...
  3. 装车机器人_智造春天脚步近 青岛这家机器人公司着手打造模块化、标准化技术平台...
  4. php excel中解析显示html代码_骑士cms从任意文件包含到远程代码执行漏洞分析
  5. python数据挖掘工程师待遇_数据挖掘工程师岗位的具体职责
  6. devc代码补全没效果_从零开始写文本编辑器(二十八):自动补全(上)
  7. php迭代什么意思,PHP中迭代变量的坑
  8. java解析xml实例_在java中使用dom解析xml的示例分析
  9. java更新无法正常安装_Java无法安装
  10. html自定义列表第三层嵌套,【微信小程序】关于微信小程序多层嵌套渲染列表以及嵌套列表中数据的获取...