C# 异步上传图片案例
好久没写博客了,都感觉自己快堕落了!今天随性写一篇关于异步上传图片的程序及插件!
说是程序及插件,其实程序占大头,所谓的插件只是两个JS。分别为:jquery.html5upload.js 和 jquery.MultiFile.js
下载地址为:http://files.cnblogs.com/files/chenwolong/upload.rar
其实也没什么好说的,直接上源代码吧!
HTML展示如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="LLYY.WebForm1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="usercenter/js/jquery-1.11.1.min.js"></script>
<script type="text/javascript" src="usercenter/js/jquery-1.11.1.min.js"></script>
<script src="usercenter/js/jquery.html5upload.js" type="text/javascript"></script>
<script src="usercenter/js/jquery.MultiFile.js" type="text/javascript"></script> </head>
<body>
<form id="form1" runat="server">
<div>
<input id="mainPicNum" name="mainPicNum" type="file" class="" accept="gif|jpg|jpeg|png|bmp|pic" maxlength="1" onchange="change()" />
</div>
<div id="result" style="padding-top:5px;"> </div>
</form>
</body>
</html>
<script type="text/javascript">
$(function () {
var result = document.getElementById("result");
var input = document.getElementById("mainPicNum"); if (typeof FileReader === 'undefined') {
result.innerHTML = "抱歉,你的浏览器不支持 FileReader,请使用火狐浏览器,或其他兼容浏览器!";
input.setAttribute('disabled', 'disabled');
} $("#mainPicNum").MultiFile({
afterFileSelect: function (element, value, master_element) {
readFile.call(element);
},
afterFileRemove: function (element, value, master_element) {
$('img').each(function () {
if ($(this).data('src') && (element.files[0].name == $(this).data('src'))) {
$(this).remove();
}
});
}
}); function readFile() {
var file = this.files[0];
if (!/image\/\w+/.test(file.type)) {
alert("文件必须为图片!");
return false;
}
var reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function (e) {
result.innerHTML += '<img data-src="' + file.name + '" src="' + this.result + '" alt="" style=" height:100px; width:100px;"/>';
}
}
}); $('#mainPicNum').Html5Upload({
url: 'UploadImage.ashx?action=action',
perLoading: function (data, curindex) {
// console.log(data)
//$(".MultiFile-remove").css("display", "none");
//$(".MultiFile-title").css("display", "none");
},
perLoaded: function (curindex, data) {
//alert(data);
//alert("上传头像成功");
//var img = '<img src="/Images/foo.png" style="background-image: url(\'' + data + '\');" />';
// $('#hiddenImg').val(data);
// $(".js_pic").html(img);
}
}); </script>
一般处理程序如下:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Web; namespace LLYY
{
/// <summary>
/// UploadImage 的摘要说明
/// </summary>
public class UploadImage : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
if (HttpContext.Current.Request.QueryString["action"] == "action")
{
uppic();
}
context.Response.ContentType = "text/plain";
} protected void uppic()
{
string fileTim = DateTime.Now.ToString("yyyMddHHmmssffff"); string pic = HttpContext.Current.Request.Form["pic"];
pic = HttpContext.Current.Server.UrlDecode(pic);
if (pic != null)
{
pic = pic.Split(',')[];
MemoryStream stream = new MemoryStream(Convert.FromBase64String(pic));
Bitmap image = new Bitmap(stream);
string fileurl = "/usercenter/uppic/";
string serverPath = HttpContext.Current.Server.MapPath(fileurl); if (Directory.Exists(serverPath) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(serverPath);
} string picNum=Guid.NewGuid().ToString("N");
string url = fileurl +picNum + ".png";
image.Save(HttpContext.Current.Server.MapPath(url));
HttpContext.Current.Response.Write(url);
} HttpContext.Current.Response.End();
} public bool IsReusable
{
get
{
return false;
}
}
}
}
今天是2018-8-7,我用这段代码作上传,发现还是有点小问题的,主要表现在抛出异常:字符数组或字符串长度无效!解决办法如下:
protected void uppic()
{
string fileTim = DateTime.Now.ToString("yyyMddHHmmssffff"); string pic = HttpContext.Current.Request.Form["images"];
pic = HttpContext.Current.Server.UrlDecode(pic);
if (pic != null)
{
var imgData = pic.Split(',')[]; string dummyData = imgData.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+");
if (dummyData.Length % > )
{
dummyData = dummyData.PadRight(dummyData.Length + - dummyData.Length % , '=');
}
byte[] byteArray = Convert.FromBase64String(dummyData); MemoryStream stream = new MemoryStream(byteArray);
Bitmap image = new Bitmap(stream);
string fileurl = "/usercenter/uppic/";
string serverPath = HttpContext.Current.Server.MapPath(fileurl); if (Directory.Exists(serverPath) == false)//如果不存在就创建file文件夹
{
Directory.CreateDirectory(serverPath);
} string picNum = Guid.NewGuid().ToString("N");
string url = fileurl + picNum + ".png";
image.Save(HttpContext.Current.Server.MapPath(url));
HttpContext.Current.Response.Write(url);
} HttpContext.Current.Response.End();
}
关于产生上述异常的原因,大家可参考:https://www.cnblogs.com/haoliansheng/p/4231846.html
直接复制粘贴即可
但是,我有一个疑问,希望大家能帮我解决。
我的疑问如下:
当网页第一次加载完成后,我们选择图片,执行如下操作:
第一步图示如下:

这时,图片已经上传到了指定路径。
紧接着,我们进行第二步,
第二步,点击 x ,把选择的图片去掉,然后再重新选择,图示如下:

结果后端程序不再执行了,也就是说程序仅仅只会在第一次执行。更改后,不执行,这样的异步上传肯定是不能满足工作需求的,但是,我个人能力有限,实在解决不了,请问各位大神,谁有好办法解决这个问题!
在此先说声谢谢!
如果谁能解决,请大度点,把您的优质代码贴在评论区!万分感谢!
@陈卧龙的博客
C# 异步上传图片案例的更多相关文章
- Jquery实现异步上传图片
利用jQuery的ajax函数就可以实现异步上传图片了.一开始我是想在处理程序中,直接用context.Request.Files来获取页面中的input file,但是不知道为什么一次获取不了.网上 ...
- 异步上传图片,光用jquery不行,得用jquery.form.js插件
异步上传图片,光用jquery不行,得用jquery.form.js插件,百度一下下载这个插件,加jquery,引入就可以了 <form id="postbackground" ...
- [Ajax] 使用Ajax异步上传图片文件(非Form表单提交)
通过表单Form提交来上传文件的方式这里就不说了: 下面介绍,通过js中使用ajax异步上传图片文件: 新建一个html页面和一个一般处理程序即可: 涉及思路: //发送2次Ajax请求完成js异步上 ...
- 利用KindEditor的uploadbutton实现异步上传图片
利用KindEditor的uploadbutton实现异步上传图片 异步上传图片最经常使用的方法就是图片在iframe中上传.这样仅仅须要刷新iframe.而不用刷新整个页面. KindEdi ...
- php结合jquery异步上传图片(ajaxSubmit)
php结合jquery异步上传图片(ajaxSubmit),以下为提交页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi ...
- 使用Ajax异步上传图片的方法(html,javascript,php)
前两天项目中需要用到异步上传图片和显示上传进度的功能,于是找了很多外国的文章,翻山越岭地去遇上各种坑,这里写篇文章记录一下. HTML <form id="fileupload-for ...
- Ajax实现异步上传图片
要求:点击页面浏览按钮后,选择需要上传的图片,页面无刷新,将上传的图片展示出来 开发流程 一:在页面编写表单代码和js代码 <!DOCTYPE html PUBLIC "-//W3C/ ...
- MVC异步上传图片到本地/服务器
这两天朋友问我,有没有异步上传图片到本地/服务器这种demo,他有用, 我就想,好吧, 那刚好周末了,整理一套出来. 主要用到的是jquery uploadify 这个juqery的插件 ,可以无刷新 ...
- ajax异步上传图片&SpringMVC后台代码
function uploadPic(){ var options = { url : "/upload/updatePic.action", type : "post& ...
随机推荐
- Android 震动模式
震动类 public class VibratorUtil { private static final long DEFAULT_VIBRATOR = 100; private static Vib ...
- loadrunner录制的时候如何应对验证码的问题解决办法?
对这个问题,我个人的看法是,基本上可以考虑从三个途径来解决该问题: 1.第一种方法,也是最容易想到的,在被测系统中暂时屏蔽验证功能,也就是说,临时修改应用,无论用户输入的是什么验证码,都认为是正确的. ...
- SpringMVC处理请求
HttpServletBean HttpServletBean主要参与了创建工作,并没有涉及请求的处理. FrameworkServlet FrameworkServlet的service方法里添加了 ...
- [Android] 获取系统顶部状态栏(Status Bar)与底部导航栏(Navigation Bar)的高度
Android一些设备都有上下两条bar,我们可以获取这些bar的信息.下面放上获取高度的代码.代码注释和其他方法有空再放. 原文地址请保留http://www.cnblogs.com/rossone ...
- vue axios 与 FormData 结合 提交文件 上传文件
---再利用Vue.axios.FormData做上传文件时,遇到一个问题,后台虽然接收到请求,但是将文件类型识别成了字符串,所以,web端一直报500,结果是自己大意了. 1.因为使用了new F ...
- Fiddler抓包学习——https请求的抓取
第一步:设置Fiddler windows下安装证书 打开fiddler 查看证书是否安装 说明已安装成功 设置端口号(下面手机设置代理所需要的) 第二部 手机端安装证书 通过fiddler查看电 ...
- 分享一下我研究SQLSERVER以来收集的笔记
分享一下我研究SQLSERVER以来收集的笔记 前言 为什麽分享??因为像现在网上很多人攻城师那样,转行去卖水果,卖早餐,总有一日我也会离开这个行业的 由于本人不是在大公司上班工资很低,我希望有一天存 ...
- 非对称加密与GPG/PGP
最近浏览博客的时候,经常会看到博主展示出自己的公钥,于是对 GPG/PGP 产生兴趣.下面简单记录相关文章的链接,方便以后了解. 简介: 1991年,程序员Phil Zimmermann为了避开政府的 ...
- Android中使用databinding编译时出现的error:Execution failed for task ':app:dataBindingProcessLayoutsDebug'
Windows环境下使用svn对AndroidStudio更新代码时,总会在源文件中出现一堆乱码,尤其是xml文件中的乱码,不仅找起来费劲,改起来更费劲. 最近从svn更新代码之后,编译时出现了下面这 ...
- Python 使用 xlwings 往 excel 中写入一行数据的两种方法
该方法跟上一篇写入一列的方法相反,代码如下: # -*- coding:utf-8 -*- import xlwings as xw list1 = [1,2,3,4,5] list2 = [[1], ...