好久没写博客了,都感觉自己快堕落了!今天随性写一篇关于异步上传图片的程序及插件!
说是程序及插件,其实程序占大头,所谓的插件只是两个JS。分别为:jquery.html5upload.js 和 jquery.MultiFile.js
下载地址为:
其实也没什么好说的,直接上源代码吧!
HTML展示如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="LLYY.WebForm1" %>
一般处理程序如下:
using System;using System.Collections.Generic;using System.Drawing;using System.IO;using System.Linq;using System.Web;namespace LLYY{ ////// UploadImage 的摘要说明 /// 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(',')[1]; 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(',')[1]; string dummyData = imgData.Trim().Replace("%", "").Replace(",", "").Replace(" ", "+"); if (dummyData.Length % 4 > 0) { dummyData = dummyData.PadRight(dummyData.Length + 4 - dummyData.Length % 4, '='); } 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 ,把选择的图片去掉,然后再重新选择,图示如下:
结果后端程序不再执行了,也就是说程序仅仅只会在第一次执行。更改后,不执行,这样的异步上传肯定是不能满足工作需求的,但是,我个人能力有限,实在解决不了,请问各位大神,谁有好办法解决这个问题!
在此先说声谢谢!
如果谁能解决,请大度点,把您的优质代码贴在评论区!万分感谢!
@陈卧龙的博客