asp.net core 通过ajax上传图片

.net core前端代码,因为是通过ajax调用,首先要保证ajax能调用后台代码,具体参见上一篇.net core 使用ajax调用后台代码。

前端代码如下:

@Html.AntiForgeryToken()
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<div>
<form id="uploadForm">
AJAX上传多文件: <input type="file" name="file" multiple />
<input type="button" value="上传" onclick="doUpload()" />
</form>
</div>
<script>
function doUpload() {
var formData = new FormData($("#uploadForm")[0]);
$.ajax({
url: "Train?handler=Upload",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
type: 'POST',
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (returndata) {
alert(returndata);
},
error: function (returndata) {
alert(returndata);
}
});
}
</script>

后端代码:

 [HttpPost]
public async Task<IActionResult> OnPostUpload([FromServices]IHostingEnvironment environment)
{
List<TmpUrl> list = new List<TmpUrl>();
var files = Request.Form.Files;
string webRootPath = environment.WebRootPath;
string contentRootPath = environment.ContentRootPath;
foreach (var formFile in files)
{
if (formFile.Length > )
{
var fileName = Guid.NewGuid().ToString()+".jpg";
var path = Path.Combine(environment.WebRootPath + "\\images\\upload", fileName);
using (var stream = new FileStream(path, FileMode.CreateNew))
{
await formFile.CopyToAsync(stream);
TmpUrl tu = new TmpUrl();
tu.Url = @"/images/upload/"+ fileName;
list.Add(tu);
}
}
} return new JsonResult(list); }

注:var stream = new FileStream(path, FileMode.CreateNew,开始这里的path指定了一个文件夹,没有包括文件名称,没有指定具体的路径,一直报错

提示:路径访问禁止,access deny...,文件夹的所有权限都改了(添加net work 、IIS User),还是不行..。坑啊,改成完整路径就可以了。

另外,在后台代码没有设置为异步时出现问题,在进行图片上传时,重新运行程序后,第一张可以上传成功,然后再上传,传到服务端的图片大小为0。

代码设置为异步后,问题解决

结合wangEditor图片上传接口

这里是使用自定义的图片上传接口,具体实现就是上面的,然后返回图片的url,调用wangEditor里的insert(imageUrl)方法在文本编辑器中插入图片。

后端代码和就是上面那一段后端代码,前端代码如下:

<head>
<meta charset="UTF-8">
<title>wangEditor demo</title>
<script src="~/js/wangEditor.js"></script>
<script src="~/js/jquery.js"></script>
</head>
<div id="editor">
<p>欢迎使用 <b>wangEditor</b> 富文本编辑器</p>
</div> @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
<script type="text/javascript">
var E = window.wangEditor;
var editor = new E('#editor'); //editor.customConfig.uploadImgServer = 'Train?handler=Upload'; //上传URL
editor.customConfig.uploadImgMaxSize = 3 * 1024 * 1024;
editor.customConfig.uploadImgMaxLength = 5;
//editor.customConfig.uploadFileName = 'myFileName'; editor.customConfig.customUploadImg = function (files, insert) {
// files 是 input 中选中的文件列表
// insert 是获取图片 url 后,插入到编辑器的方法
var uploadData = new FormData();
for (var i = 0; i < files.length; i++) {
uploadData.append(files[i].name, files[i]);
} $.ajax({
type: "POST",
url: "Train?handler=Upload",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN",
$('input:hidden[name="__RequestVerificationToken"]').val());
},
data: uploadData,
processData: false,
contentType: false,
async: false,
success: function (response) {
alert(response);
for (var i = 0; i < response.length; i++) {
insert(response[i].url);
}
},
failure: function (response) {
alert(response);
}
}); //editor.customConfig.uploadImgHooks = {
// customInsert: function (insertImg, result, editor) {
// // 图片上传并返回结果,自定义插入图片的事件(而不是编辑器自动插入图片!!!)
// // insertImg 是插入图片的函数,editor 是编辑器对象,result 是服务器端返回的结果 // // 举例:假如上传图片成功后,服务器端返回的是 {url:'....'} 这种格式,即可这样插入图片:
// for (var i = 0; i < length; i++) { // }
// //var url = result.data;
// //insertImg(url); // // result 必须是一个 JSON 格式字符串!!!否则报错
// }
//}
// 通过 url 参数配置 debug 模式。url 中带有 wangeditor_debug_mode=1 才会开启 debug 模式
editor.customConfig.debug = location.href.indexOf('wangeditor_debug_mode=1') > 0;
//editor.customConfig.uploadImgShowBase64 = true // 使用 base64 保存图片 // 上传代码返回结果之后,将图片插入到编辑器中
//insert(imgUrl)
} editor.create();
</script>

wangEditor

这个文本编辑器可以上传本地图片、网络图片,上传本地图片按钮默认是不显示的,只有在配置中启用了本地上传相关配置才显示,  editor.customConfig一系列的。

asp.net core 通过ajax上传图片及wangEditor图片上传的更多相关文章

  1. asp.net core 如何集成kindeditor并实现图片上传功能

     准备工作 1.visual studio 2015 update3开发环境 2.net core 1.0.1 及以上版本  目录 新建asp.net core web项目 下载kindeditor ...

  2. Ajax+PHP实现异步图片上传

    1.html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...

  3. wangEditor 图片上传失败提示

    wangEditor 官网自定义上传事件:https://www.kancloud.cn/wangfupeng/wangeditor2/123689 声明:我用的wangEditor版本是2.1.23 ...

  4. ASP.NET CORE使用WebUploader对大文件分片上传,并通过ASP.NET CORE SignalR实时反馈后台处理进度给前端展示

    本次,我们来实现一个单个大文件上传,并且把后台对上传文件的处理进度通过ASP.NET CORE SignalR反馈给前端展示,比如上传一个大的zip压缩包文件,后台进行解压缩,并且对压缩包中的文件进行 ...

  5. 基于ASP.Net +easyUI框架上传图片,实现图片上传,提交表单

    <body> <link href="../../Easyui/themes/easyui.css" rel="stylesheet" typ ...

  6. Asp.net core 学习笔记 ( upload/download files 文件上传与下载 )

    更新 :  2018-01-22  之前漏掉了一个 image 优化, 就是 progressive jpg refer : http://techslides.com/demos/progressi ...

  7. 在ASP.NET项目中使用CKEditor +CKFinder实现图片上传功能

    前言 之前的项目中一直使用的是FCKeditor,昨天突然有个想法:为什么不试一下新的CKEditor呢?于是花了大半天的时间去学习它的用法,现在把我的学习过程与大家分享一下. 谈起FCKeditor ...

  8. 基于THINKPHP+layui+Ajax无刷新实现图片上传预览

    <fieldset class="layui-elem-field" style="width:500px;margin:50px 0 0 300px;" ...

  9. asp.net core系列 69 Amazon S3 资源文件上传示例

    一.  上传示例 Install-Package AWSSDK.S3 -Version 3.3.104.10 using Amazon; using Amazon.Runtime; using Ama ...

随机推荐

  1. CodeForces 纪念一下这个突破性的时刻

  2. 洛谷【P2458】[SDOI2006]保安站岗 题解 树上DP

    题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...

  3. 【清北学堂2018-刷题冲刺】Contest 9

     前几天本蒟蒻一直在颓废所以这篇题解咕了很久,而且最后一个题目不太会,最终也没完成,非常惭愧.  写这些题目收获相当大.后面的日子呢,我会继续着手刷NOIP题目和Codeforces题目.  到这里就 ...

  4. 枚举 enum 成员变量初始化

    typedef enum { A1, A2, A3, A4 = , A_END }A; 如果A1赋值为5,则下列依次递增1,即A2等于6,A3等于7: 由于A4赋值为10,所以A_END等于11 如果 ...

  5. sudALSA lib dlmisc.c:236:(snd1_dlobj_cache_get) Cannot open shared library /usr/lib/alsa-lib/libasound_module_pcm_pulse.so

    我使用的系统是kali,默认的浏览器为iceweasel.默认的浏览器很好用!! 但是,给浏览器安装flash后,播放视频,会报错:有视频,无声音. 下面给出我的解决方案:

  6. django分页功能

    采用django自带的Paginator功能 from django.core.paginator import Paginator food = foodInfo.objects.filter(fo ...

  7. logstash5.5 数据采入elasticsearch5.5(基于x-pack)

    logstash5.5 数据采入elasticsearch5.5(基于x-pack) 以采集redis日志信息为例 redis日志文件.MQ(redis).logstash主机:10.10.83.16 ...

  8. Jenkins自动发布代码实战篇

    Jenkins自动发布代码实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.Jenkins服务器配置秘钥对并上传到Gitlab中 1>.在Jenkins后端生成秘钥 ...

  9. ATS 自定义日志格式

    字段解释 %<chi> 客户端IP %<caun> The username of the authenticated client. A hyphen (-) means t ...

  10. 后台拿webshell方法(2)

    在这里总结一下后台拿webshell的方法: 备份突破(在博客上有随笔介绍) 一般在后台上传文件类型受到限制,可以利用数据库备份将其上传的格式改为后门执行格式即可: asp更改为jpg     jpg ...