.Net Core 图片上传FormData和Base64
缓冲和流式传输是上传文件的两种常用方案,这里主要演示流式传输。
<form id="uploadForm">
图片上传: <input type="file" name="file" multiple value="选择" onchange="doUpload()" id="ajaxfile" />
</form>
<script type="text/javascript">
//图片上传
function doUpload()
{
var formData = new FormData($("#uploadForm")[]);
$.ajax({
url: '@Url.Action("FileSave", "FileUpload")',
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
//成功后执行的方法
},
error: function (returndata) {
//上传失败执行的方法
}
});
}
</script>
[HttpPost]
public async Task<IActionResult> FileSave()
{
//获取Form提交的文件
var files = Request.Form.Files;
long size = files.Sum(f => f.Length);
string webRootPath = _hostingEnvironment.WebRootPath; //物理路径
string contentRootPath = _hostingEnvironment.ContentRootPath;
string showfilePath = "";
foreach (var formFile in files)
{
if (formFile.Length > )
{
int count = formFile.FileName.Split('.').Length;
string fileExt = formFile.FileName.Split('.')[count - ]; //文件扩展名,不含“.”
long fileSize = formFile.Length; //获得文件大小,以字节为单位
string newFileName = System.Guid.NewGuid().ToString() + "." + fileExt; //随机生成新的文件名
#region 文件夹不存在则创建
var filePath = webRootPath + "/upload";
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
#endregion
#region 文件不存在则新建
filePath = webRootPath + "/upload/" + newFileName;
showfilePath = "upload/" + newFileName;
FileHelper.CreateFile(filePath);
#endregion
//把上传的图片复制到指定的文件中
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
}
}
}
return Ok(new { count = files.Count, savepath = showfilePath });
}
//上传图片
afterRead(file) {
// 此时可以自行将文件上传至服务器
let obj={};
var imgurl=file.content
//需要将文件的地址 需要去掉base64头部标签 这里简单用replace替换
imgurl = imgurl.replace("data:image/jpeg;base64,", "");
//获取图片的格式
var Img=file.file.name.split('.')[1]
//创建formdata对象 传递参数
var formdata=new FormData();
formdata.append("fileBase64",imgurl);//添加一条数据
formdata.append("fileExt",Img);//添加一条数据
//ajax调用接口,ajax的参数配置
this.$ajax({
method: 'post',
dataType:'json',
url: "http://*****/FileUpload/UploadBase64",
contentType : false,// 告诉jQuery不要去设置Content-Type请求头
processData: false,// 告诉jQuery不要去处理发送的数据,
beforeSend : function(req) {
req.setRequestHeader('Content-Type', 'application/json'); ///加这一行解决问题
},
data: formdata
}).then(res=>{
//图片上传成功后 执行的操作
var msg=res.data.msg
}).catch(error =>{
console.log(error)
})
},
后端方法:原理和1基本相同
[HttpPost]
public string UploadBase64(string fileBase64,string fileExt)
{
TableData data = new TableData();
byte[] bytes = ToBytes_FromBase64Str(fileBase64);
//var fileExtension = Path.GetExtension(fileName);
string webRootPath = _hostingEnvironment.WebRootPath;
string newFileName = System.Guid.NewGuid().ToString() + "." + fileExt; //随机生成新的文件名
var filePath = webRootPath + "/upload";
var RetfilePath = "upload/" + newFileName;
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
filePath = webRootPath + "/upload/" + newFileName;
try
{
data.code = ;
FileStream fs = new FileStream(filePath, FileMode.CreateNew);
fs.Write(bytes, , bytes.Length);
fs.Close();
data.msg = RetfilePath;
}
catch (Exception ex)
{
data.code = ;
data.msg = "newFileName:"+ newFileName+"Error:"+ex.Message;
}
return JsonHelper.Instance.Serialize(data);
}
附:FileHelper类 和TableData类
public static class FileHelper
{ /// <summary>
/// 拷贝文件
/// </summary>
/// <param name="orignFile">原始文件</param>
/// <param name="newFile">新文件路径</param>
public static void FileCoppy(string orignFile, string newFile)
{
if (string.IsNullOrEmpty(orignFile))
{
throw new ArgumentException(orignFile);
}
if (string.IsNullOrEmpty(newFile))
{
throw new ArgumentException(newFile);
}
System.IO.File.Copy(orignFile, newFile, true);
}
/// <summary>
/// 删除文件
/// </summary>
/// <param name="path">路径</param>
public static void FileDel(string path)
{
if (string.IsNullOrEmpty(path))
{
throw new ArgumentException(path);
}
System.IO.File.Delete(path);
}
/// <summary>
/// 移动文件
/// </summary>
/// <param name="orignFile">原始路径</param>
/// <param name="newFile">新路径</param>
public static void FileMove(string orignFile, string newFile)
{
if (string.IsNullOrEmpty(orignFile))
{
throw new ArgumentException(orignFile);
}
if (string.IsNullOrEmpty(newFile))
{
throw new ArgumentException(newFile);
}
System.IO.File.Move(orignFile, newFile);
}
//创建路径
public static void CreatePath(string FilePath)
{
if (!Directory.Exists(FilePath))
{
Directory.CreateDirectory(FilePath);
}
}
//创建文件
public static void CreateFile(string FilePath)
{
if (!File.Exists(FilePath))
{
FileStream fs = File.Create(FilePath);
fs.Close();
}
}
}
public class TableData
{
/// <summary>
/// 状态码
/// </summary>
public int code;
/// <summary>
/// 操作消息
/// </summary>
public string msg;
/// <summary>
/// 总记录条数
/// </summary>
public int count; /// <summary>
/// 数据内容
/// </summary>
public dynamic data;
public TableData()
{
code = ;
msg = "加载成功"; }
}
演示效果如下:

.Net Core 图片上传FormData和Base64的更多相关文章
- 项目回顾3-再谈图片上传-FormData+ajax上传
上次在纠结图片上传用base64还是form表单,现在感觉好蠢,因为又开辟了第三条道路. 其实也根本用不到form 只需要一个上传文件的input就好了 <input id="file ...
- 项目中使用的图片上传方法,base64存本地
//生成健康报告 public function uploadJkbg(Request $r) { $data = $r->all(); $jkbg['jkbg_ctime'] = time() ...
- TinyMCE编辑器图片上传扩展(base64方式),asp.net mvc5
编辑器上传图片一般都是先上传到服务器中,若是用户取消或忘记提交表单就产生一张废图在空间里面,时间一长就产生大量占用空间的无用图片,现在就试试提交前先用base64,提交后,在后台处理编辑器内容中的&l ...
- VUE2.0+VUE-Router做一个图片上传预览的组件
之前发了一篇关于自己看待前端组件化的文章,但是由于学习和实践的业务逻辑差异,所以自己练习的一些demo逻辑比较简单,打算用vue重构现在公司做的项目,所以在一些小的功能页面上使用vue来做的,现在写的 ...
- ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64)
ASP.NET Core 简单实现七牛图片上传(FormData 和 Base64) 七牛图片上传 SDK(.NET 版本):https://developer.qiniu.com/kodo/sdk/ ...
- .net core 基于multipart/form-data的文件上传,这里以图片上传为例
首先传递的数据格式大概如下: 然后就可以在后端获取数据了:直接上代码了哈: [HttpPost] ///分别获取 data数据和调用图片上传方法 public async Task< ...
- asp.net core 通过ajax上传图片及wangEditor图片上传
asp.net core 通过ajax上传图片 .net core前端代码,因为是通过ajax调用,首先要保证ajax能调用后台代码,具体参见上一篇.net core 使用ajax调用后台代码. 前端 ...
- C#设计模式总结 C#设计模式(22)——访问者模式(Vistor Pattern) C#设计模式总结 .NET Core launch.json 简介 利用Bootstrap Paginator插件和knockout.js完成分页功能 图片在线裁剪和图片上传总结 循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi
C#设计模式总结 一. 设计原则 使用设计模式的根本原因是适应变化,提高代码复用率,使软件更具有可维护性和可扩展性.并且,在进行设计的时候,也需要遵循以下几个原则:单一职责原则.开放封闭原则.里氏代替 ...
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...
随机推荐
- ubuntu笔记2-误删dpkg的/var/lib/dpkg/info文件夹
由于误删了dpkg的/var/lib/dpkg/info文件夹,导致安装文件的时候报错 错误提示:E: Sub-process /usr/bin/dpkg returned an error code ...
- 使用List中remove方法时需要注意的问题
String str1 = new String("1"); String str2 = new String("2"); String str3 = new ...
- [BUAA软工]Alpha阶段测试报告
测试报告 一.测试计划 1.1 功能测试 1.2 UI测试 1.3 测试中发现的bug https://github.com/bingduoduo1/backend/issues/21 https:/ ...
- Gaze Estimation学习笔记(2)-It's Written All Over Your Face Full-Face Appearance-Based Gaze Estimation
目录 前言 将完整脸部图像作为输入的空间权重CNN方法 将full-face image作为输入的原因 加入空间权重的CNN方法 基础CNN结构 空间权重机制 实验及分析 头部姿态.面部表现视线方向的 ...
- SLF4J使用,slf4j-api、slf4j-log4j12以及log4j的关系
SLF4J不同于其他日志类库,与其它有很大的不同.SLF4J(Simple logging Facade for Java)不是一个真正的日志实现,而是一个抽象层( abstraction layer ...
- Unity资源商店 Asset store下载文件夹的位置
Win10 C:\Users\用户名\AppData\Roaming\Unity\Asset Store-5.x\ Mac OS X ~/Library/Unity/Asset Store
- Python数据分析学习(一)
转摘:https://segmentfault.com/a/1190000015440560 一.数据初探 首先导入要使用的科学计算包numpy,pandas,可视化matplotlib,seabor ...
- Mysql 查询一个月当前时间一个月之前的数据
sql: AND date_format(createDTM, MONTH),'%Y-%m-%d')
- 解决StrToDateTime()不是有效日期类型的问题
方法一: function GetDateFormat():string; var SysFrset: TFormatSettings; begin Result:=''; GetLocaleForm ...
- MySQL使用存储过程实现判断表中字段或者索引是否存在,如果不存在则创建
使用存储过程可以保证数据库升级脚本可以重复执行而不会报错. CREATE TABLE `tb_user` ( `id` ) NOT NULL COMMENT '非自增id', `account` ) ...