• uploadify的使用


    uploadify的使用

    课程设计需要实现上传文件模块,本来ASP.NET是有内置的控件,但是ASP.NET MVC没有,所以就有两种方法:自定义和采用第三方插件。由于时间的关系,故采用第三方插件:uploadify。

          uploadify的使用必须下载相应的文件,下载地址:http://www.uploadify.com/download/

          先是视图:

    复制代码
    <asp:Content ID="Content3" ContentPlaceHolderID="head" runat="server">
        <script src="/Scripts/swfobject.js" type="text/javascript"></script>
        <script src="/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
        <script src="/Scripts/jquery.uploadify.v2.1.0.min.js" type="text/javascript"></script>
        <link href="/Content/uploadify.css" rel="stylesheet" type="text/css" />
    
        <style type="text/css">
            .SuccessText
            {
                color: Red;
                font-weight: bold;
            }
    
            .FaileText
            {
                color: Green;
                font-weight: bold;
            }
        </style>
    
        <script type="text/javascript">
            $(function () {
                $('#fileInput1').uploadify({
                    'uploader': '/Content/uploadify.swf',
                    'script': '/Home/LoadFile',
                    'folder': '/UploadFiles',
                    'cancelImg': '/Content/cancel.png',
                    'sizeLimit': 1024 * 1024 * 4, //4M
                    'multi': true,
                    'onComplete': Complete
                });
    
            });
            function Complete(event, queueID, fileObj, response, data) {
                if (response != "") {
                    showInfo("成功上传" + response, true);
                }
                else {
                    showInfo("文件上传出错!", false);
                }
            }
            //显示提示信息,SuccessText为绿色,即上传成功;FalseText为红色,即上传失败        function showInfo(msg, type) {
                var msgClass = type == true ? "SuccessText" : "FaileText";
                $("#result").removeClass();
                $("#result").addClass(msgClass);
                $("#result").html(msg);
            }
            //如果点击‘导入文件’时选择文件为空,则提示
            function checkLoad() {
                if ($.trim($('#fileInput1Queue').html()) == "") {
                    alert('请先选择要上传的文件!');
                    return false;
                }
                return true;
            }
        </script>
    </asp:Content>
    
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    
        <div>
            <p>
                <input id="fileInput1" name="fileInput1" type="file" />
            </p>
            <p style="margin-top: 5px; font-size: 14px; font-weight: bold;">
                <a href="javascript:if(checkLoad()){$('#fileInput1').uploadifySettings('scriptData',{'name':$('#test').val()});$('#fileInput1').uploadifyUpload();}">上传</a>
            </p>
            <p style="margin-top: 5px; font-size: 14px; font-weight: bold;"><span id="result"></span></p>
        </div>
    </asp:Content>
    复制代码

          考虑到其他人的工作是基于ASP.NET引擎的,所以我的视图也是采用该视图引擎。
          视图中最重要的部分就是javascript代码部分:

          uploader:就是uploadify.swf文件的相对路径,所谓的swf文件就是一个带有文字("浏览")的按钮,该按钮点开就是一个文件对话框,供用户选择要上传的文件。

          script:后台处理程序的相对路径,也就是我们用户处理上传文件数据的Action。

          folder:上传文件存放的目录。

          cancelImg:该图片点击可以取消上传。

          sizeLimit:上传文件的大小限制。

          multi:设置为true时可以同时上传多个文件。

          onComplete:文件上传完后的触发事件,一共有5个参数,重点在于后面两个:response为后台处理程序返回的值,如果为空,说明文件上传失败。data有两个属性:fileCount表示剩余没有上传完成的文件的个数,speed表示文件上传的平均速率(kb/s)。我们这里的onComplete函数很简单,就是简单的判断文件是否上传成功。

         还有两个很重要的属性:fileExt和fileDesc。它们必须一起使用,并且值是一样的,因为它们规定的就是选择上传的文件类型。fileExt设置可以选择的文件类型,其实就是文件的扩展名。fileDesc用来设置选择文件对话框中的提示文本,也就是我们一般在选择文件的时候,都会有一个文件类型,而fileDesc能人为规定该文件类型是什么。这里之所以没有用到这两个属性,是因为我默认选择所有文件,但如果模块只要求上传图片格式,那么我们就可以通过这两个属性达到文件过滤了。

          效果图:

         

         值得注意的是,如果出现这样的界面:

         

         说明swfobject.js没有添加正确。

         如果是这样:

        

         则是jquery-1.4.1.min.js或者jquery.uploadify.v2.1.0.min.js没有添加正确。这种情况可以选择文件,但是无法上传,之前出现这样的错误,导致我以为是我的浏览器无法上传文件,以致走了很多弯路,搞了很多配置,其实就是没有正确导入相应的js文件。

        接着就是Action:

    复制代码
           [HttpPost]
            public ContentResult LoadFile(HttpPostedFileBase FileData, string folder, string name)
            {
                string result = "";
                if (null != FileData)
                {
                    try
                    {
                        result = Path.GetFileName(FileData.FileName);//获得文件名
                        string extension = Path.GetExtension(FileData.FileName);//获得文件扩展名
                        string saveName = FileData.FileName + extension;//实际保存文件名
                        saveFile(FileData, folder, saveName);//保存文件
                    }
                    catch
                    {
                        result = "";
                    }
                }
                return Content(result);
            }
    
            [NonAction]
            private void saveFile(HttpPostedFileBase postedFile, string filepath, string saveName)
            {
                string phyPath = Request.MapPath("~" + filepath + "/");
                if (!Directory.Exists(phyPath))
                {
                    Directory.CreateDirectory(phyPath);
                }
                try
                {
                    postedFile.SaveAs(phyPath + saveName);
                }
                catch (Exception e)
                {
                    throw new ApplicationException(e.Message);
    
                }
            }
    复制代码

           这部分的内容很简单,就是从FileData中取出文件名和扩展名,然后保存起来而已。由于涉及到文件I/O,所以需要添加命名空间System.IO。
           大概就是这样,具体的大家还是得去看官方文档。

     
     
     
    标签: ASP.NET MVC

    浅析ajax请求json数据并用js解析

    自从接触了jquery就喜欢上了前端开发,而且深深感受到了前端开发的强大与重要之处。同时也想为asp.net鸣不平,事实上asp.net并没有臃肿,说它臃肿的人无非是那些不了解它的人,可能他们看见过一些asp.net低级程序员在不断往页面里拖控件,然后发现生成的页面中含有大量的垃圾代码,而且几乎把所有的逻辑处理都写在了服务器端,觉得服务器压力太大了。事实上,刚入门asp.net的人会有拖控件的习惯,但是当你再深入你会发现,最终asp.net的开发模式还是跟PHP、jsp等其它web开发模式是一样的,PHP是html+css+js+PHP语言,asp.net是html+css+js+C#语言,唯一不同的只是服务器端语言而已(面向开发人员来说),如果看到这里还说asp.net很臃肿,因为需要.net框架的支持,那么为什么不说jsp很臃肿?jsp也需要java虚拟机的支持啊!所有的web开发都是基于客户端发请求-服务器端返回数据-客户端再处理数据这个模式,而且asp.net开发模式的好处在于很好地分离了服务器端与客户端的代码,不用在html里嵌套服务器端的代码——当然这种模式现在已经几乎被各种web开发采用了。

    扯远了。我们今天要掌握的很少,我比较喜欢用很少的代码来写demo,这样大家比较容易掌握(内容有点低级,大神请绕道)。

    我们建一个这样的web项目:

    首先写客户端的html代码

     view code
    <table>
        <thead>
            <tr>
                <td>学号</td>
                <td>姓名</td>
                <td>班别</td>
                <td>性别</td>
                <td>电话</td>
            </tr>
        </thead>
        <tbody></tbody>
    </table>
    <input id="btnget" type="button" value="加载数据" />

    js代码

     View Code
    $(function () {
        $("#btnget").click(function () {
            $.ajax({
                type: "post",
                dataType: "json",
                url: "data.ashx",
                success: function (msg) {
                    var str = "";
                    for (i in msg) {
                        str += "<tr><td>" + msg[i].id + "</td><td>" + msg[i].name + "</td><td>" + msg[i].cla + "</td><td>" + msg[i].sex + "</td><td>" + msg[i].tel + "</td></tr>";
                    }
                    $("tbody").append(str);
                }
            });
        });
    });

    为了使表格好看一些,我们定义一下它的样式

     View Code
    <style type="text/css">
        table {
            border-collapse: collapse;
        }
        table td {
            text-align: center;
            border: 1px solid gray;
            padding: 3px 10px;
        }
    </style>

    然后写服务器端返回json数据的代码

     View Code
    string data = "[{"id":"2010324268","name":"林宇","cla":"10软件","sex":"男","tel":"13800138000"},{"id":"2010324256","name":"李四","cla":"10网络","sex":"女","tel":"10010"},{"id":"2010324264","name":"张三","cla":"10软件","sex":"男","tel":"10086"}]";
    context.Response.Write(data);

    这里我直接把json数据写好格式了。一般来说是需要从数据库把数据读取出来然后拼凑成json格式,或者可以使用别人写好的一些序列化成json数据的类,当然,我更建议你自己写一个,生成一个类库方便以后使用。

    如果需要解释一下json是什么,它是和xml等等一些数据并列的一种数据格式,形如:[{"id":"1","name":"张三","age":"20"},{"id":"2","name":"李四","age":"18"}]这样的格式。

    这应该是每个web开发的人员都应该掌握的基础技术吧。

    小生不才,但是希望以最少代码写的一个demo带给有需要的人一些他们想要的学习捷径。

    这里附上一个小demo

     
     
    分类: jquery
    标签: jqueryjsonajax
  • 相关阅读:
    安卓读取SD卡的容量
    Eclipse常用快捷键
    安卓实现记住密码登陆功能
    eclipse DDMS导出文件失败--android Failed to push the item
    LinearLayout线性布局搭配权重属性的使用
    unity 天空盒有缝隙的解决方案
    unity gitignore
    unity 5.6.1 Oculus手柄输入问题
    两个长整形相除等于零
    Unity 获得视频的某一帧,生成缩略图
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3139231.html
Copyright © 2020-2023  润新知