博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 异步上传图片案例
阅读量:6245 次
发布时间:2019-06-22

本文共 3921 字,大约阅读时间需要 13 分钟。

好久没写博客了,都感觉自己快堕落了!今天随性写一篇关于异步上传图片的程序及插件!

说是程序及插件,其实程序占大头,所谓的插件只是两个JS。分别为:jquery.html5upload.js 和 jquery.MultiFile.js 

下载地址为:

其实也没什么好说的,直接上源代码吧!

HTML展示如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="LLYY.WebForm1" %>    
View Code

一般处理程序如下:

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;            }        }    }}
View Code

今天是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();        }
View Code

关于产生上述异常的原因,大家可参考:https://www.cnblogs.com/haoliansheng/p/4231846.html

直接复制粘贴即可

但是,我有一个疑问,希望大家能帮我解决。

我的疑问如下:

当网页第一次加载完成后,我们选择图片,执行如下操作:

第一步图示如下:

这时,图片已经上传到了指定路径。

紧接着,我们进行第二步,

第二步,点击 x ,把选择的图片去掉,然后再重新选择,图示如下:

结果后端程序不再执行了,也就是说程序仅仅只会在第一次执行。更改后,不执行,这样的异步上传肯定是不能满足工作需求的,但是,我个人能力有限,实在解决不了,请问各位大神,谁有好办法解决这个问题!

在此先说声谢谢!

如果谁能解决,请大度点,把您的优质代码贴在评论区!万分感谢!

@陈卧龙的博客

你可能感兴趣的文章
Lua中的操作系统库
查看>>
环境变量path的值大于1024的解决办法
查看>>
webpack 通用环境快速搭建
查看>>
js获取url参数值
查看>>
Django 文件下载功能
查看>>
浅谈前端性能优化(PC版)
查看>>
modernizr的介绍和使用
查看>>
Java小实验之数据转换
查看>>
ASP.NET MVC之从控制器传递数据到视图方式
查看>>
IsPostBack原理详解
查看>>
华为交换机-SNMP配置
查看>>
centos修改mysql密码或者进入mysql后解决Access denied for user ''@'localhost' to database 'mysql错误...
查看>>
分数阶傅里叶变换(FRFT)
查看>>
hibernate(八)一对多关联
查看>>
swift - 本地通知2 - 啰嗦版
查看>>
swift - idfa(唯一标示/下载量/广告追踪)
查看>>
GC垃圾回收
查看>>
HDU 4804 Campus Design
查看>>
nyist 42 一笔画 (欧拉回路 + 并查集)
查看>>
用javascript实现用户登录验证
查看>>