文件上传---利用表单提交

时间:2022-08-29 08:41:08

上次我们介绍了插件上传文件的方法,配合我们的一般处理程序处理文件,很强大。介绍——》文件上传(插件版)

源码:https://github.com/SeaLee02/FunctionModule     UploadFiles/WebDemo/UpControl2/UploadDemo.aspx   源码

ListJson  DLL文件和JS:点击下载

这次我们介绍我们利用ASP.NET里面页面自带的form表单来上传文件

页面:

文件上传---利用表单提交

前台页面

需要在form里面添加一个属性,没有的话就不能上传别的格式

文件上传---利用表单提交

 

  <div class="group">
            <label class="title">上传</label>
            <div class="controls ">
                <ul class="filebox">
                    <li class="txtfilename">
                       <asp:TextBox runat="server" ID="txtTypeImg" CssClass="input02"></asp:TextBox>
                    </li>
                    <li class="btnfilea"><a href="javascript:void(0)" onclick="btnfileaclick($(this))" class="btnfilebtn">上传图片</a>
                    </li>
                    <li class="fileinput">
                        <input type="file" name="fileuploadico" id="fileuploadico" onchange="fileonchange($(this),'myfrom')" />
                    </li>
                </ul>
            </div>
        </div>
        <script src="../JS/jquery-1.11.0.min.js"></script>
        <script src="../JS/UpControl2/jquery.form.min.js"></script>  <%--form表单提交,不能少--%>
        <script src="../JS/UpControl2/jquery.leadinupload.js"></script> <%--脚本处理 --%>

然后就没有了,似乎看起来很简单。

我们来理解理解样式,

我们点击上传图片的时候会触发 btnfileaclick($(this))  ,这个方法,我们封装在最后一个js文件里面了。

我们来看看最后一个js文件

//当我点击上传的时候,这个事件触发,然后主动让下面的事件发生
var btnfileaclick = function ($this) {

    $this.parent().siblings(".fileinput").find("input[type=file]").click();

}


var fileonchange = function ($this,formId) {

    var fileid = $this.attr("id"); //文件上传ID
    var txtid = $this.parent().siblings(".txtfilename").find("input[type=text]").attr("id"); //路径ID
    //formId是form的Id   ajaxSubmit的前提需要引用jquery.form.min.js
    $("#" + formId).ajaxSubmit({
        beforeSubmit: function (formData, jqForm, options) {
        },
          uploadProgress: function (event, position, total, percentComplete) { //显示进度的

           //console.log("pos:" + position + ",total:" + total + ",percebt:" + percentComplete);       //position:当前传了多少,total:*的大小,percentComplete :百分比
            },success: function (data) {

 $("#" + data.txtName).val(data.filePath); //文本框赋值 data有id和value  }, error: function (data, status, e) { alert("上传失败"); }, url: "/Tools/Update.ashx", type: "post", //post提交  data: { fileid: fileid, txtid: txtid }, dataType: "json", timeout: 60000 }); }

所以我们就得去看我们的Tools/Update.ashx了

文件上传---利用表单提交

 

   context.Response.ContentType = "text/plain";
            //post提交
            string fileid = context.Request["fileid"].ToString();//上传控件ID
            string txtid = context.Request["txtid"].ToString();//文本框ID

            HttpPostedFile file = context.Request.Files[fileid]; //得到上传文件
            string uploadpath = HttpContext.Current.Server.MapPath("/UplaodFileds/");//绝对路径

            //获取扩展名  只有知道完全路径才能用Path来获取
            string fileExtension = System.IO.Path.GetExtension(file.FileName);
            string _NewFileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + fileExtension;//新名字

            string _Folder = DateTime.Now.ToString("yyyyMMdd");//文件夹
            string _NewPath = uploadpath + _Folder + "\\";
            if (file != null)
            {
                if (!Directory.Exists(_NewPath)) //判断文件夹是否存在 不在就创建一个
                {
                    Directory.CreateDirectory(_NewPath);
                }
                file.SaveAs(_NewPath + _NewFileName); //保存
            }
             
            JsonData data = new JsonData();  //数据转型  需要引用ListJson

            data["txtName"] = txtid;
            data["filePath"] = "/UplaodFileds/" + _Folder + "/" + _NewFileName;

            // 如果不想调用上面的类就返回一个字符串格式的Json数据
            // "{\"txtName\": \"" + txtid + "\", \"filePath\": \"" + "/UplaodFileds/" + _Folder + "/" + _NewFileName + "\"}"


            //返回json格式 txtName:"文本框ID",filePath:"上传文件的路径"
            
            context.Response.Write(data.ToJson());