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 + ‘"  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(‘,‘)[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;
            }
        }
    }
}

直接复制粘贴即可

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

我的疑问如下:

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

第一步图示如下:

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

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

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

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

在此先说声谢谢!

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

@陈卧龙的博客

时间: 2024-10-10 05:53:19

C# 异步上传图片案例的相关文章

[Ajax] 使用Ajax异步上传图片文件(非Form表单提交)

通过表单Form提交来上传文件的方式这里就不说了: 下面介绍,通过js中使用ajax异步上传图片文件: 新建一个html页面和一个一般处理程序即可: 涉及思路: //发送2次Ajax请求完成js异步上传文件的操作:          //第1次,post 只上传文件,返回文件名name          //第2次,get 根据文件名name定位服务器上的文件,同时根据浏览器传过来的realname重命名服务器上的文件          //(如果有其他参数,也可以通过第2次一并上传) 图片文件

ajax异步上传图片&amp;SpringMVC后台代码

function uploadPic(){ var options = { url : "/upload/updatePic.action", type : "post", dataType : "json", success : function(data){ $("#allUrl").attr("src", data.url); $("#imgUrl").val(data.url);

php结合jquery异步上传图片(ajaxSubmit)

php结合jquery异步上传图片(ajaxSubmit),以下为提交页面代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <he

搭建一个Tomcat,作为图片服务器,异步上传图片

1.图片服务器Tomcat的设置  tomcat/conf/web.xml中内容更改,将tomcat设置为可以读写 <servlet>     <servlet-name>default</servlet-name>             <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>         <init-param>   

在.net MVC中异步上传图片或者文件

今天用到了MVC异步上传图片,找了半天写下来以后方便查找异步提交图片需要一个MyAjaxForm.cs             地址http://pan.baidu.com/s/1i3lA693 密码txgp 前台代码 @using (Ajax.BeginForm("AddMessages", "MenuInfo", new AjaxOptions { HttpMethod = "post", OnSuccess = "Successd

异步上传图片,光用jquery不行,得用jquery.form.js插件

异步上传图片,光用jquery不行,得用jquery.form.js插件,百度一下下载这个插件,加jquery,引入就可以了 <form id="postbackground" method="POST" action="#" enctype="multipart/form-data"> <input name="upload" type="file" id="

MVC异步上传图片到本地/服务器

这两天朋友问我,有没有异步上传图片到本地/服务器这种demo,他有用, 我就想,好吧, 那刚好周末了,整理一套出来. 主要用到的是jquery uploadify 这个juqery的插件 ,可以无刷新,直接后台上传返回地址 下面先看前台的代码: @{ ViewBag.Title = "Demo"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section styles{ <link href="~/Co

利用KindEditor的uploadbutton实现异步上传图片

利用KindEditor的uploadbutton实现异步上传图片 异步上传图片最常用的方法就是图片在iframe中上传,这样只需要刷新iframe,而不用刷新整个页面.     KindEditor文本编辑器框架中uploadbutton可以帮助我们实现,不再需要我们自己去写iframe的实现,使用起来很方便. html部分: ..... <input class="" type="text" name="beautyTown.img_0"

使用ajaxFileUpload实现异步上传图片

index.html <head runat="server"> <title></title> <script src="jquery.min.js" type="text/javascript"></script> <script src="ajaxfileupload.js" type="text/javascript"><