热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SWFUpload插件+FTP文件上传,我这么玩

效果图:虽然之前接触过swfupload这个上传插件,但是之前做的样子是这样的实战项目做的这么丑爆了我估计老大的内心是会崩溃的,所以特地在网上找了美观一点的样式,原帖地址:http

效果图:

技术分享

技术分享
虽然之前接触过swfupload这个上传插件,但是之前做的样子是这样的
技术分享
技术分享
实战项目做的这么丑爆了我估计老大的内心是会崩溃的,所以特地在网上找了美观一点的样式,原帖地址:http://www.xiariboke.com/article/200.html
原帖后台是基于php写的插件,虽然各位看官也许没学过php但是也应该见过php跑,后台改成c#代码就可以了。
前台页面是一样的,在引入一堆js文件之后,改动一下对js文件的引用路径即可,比如这样:
技术分享
技术分享
由于原版直接使用页面会有乱码
技术分享
技术分享
我也懒得测试是哪个js文件的编码不支持中文所以对js文件一律加上了 chartset="gb2312"的属性,显示问题解决。
 
来看看js中的配置,改动如下:
技术分享
upload_url:请求上传的地址。请求自己写的aspx或者ashx或者MVC的controller
file_size_limit:上传文件限制大小。当然这只是插件初步对文件大小的检测,为防止大请求报文攻击,iis已经默认对文件上传做了限制,具体的数据我忘记了,测试是在5M以内,因此并不是在这里写多少就能上传多少,具体实现修改文件上传大小见下文
file_types:上传文件类型的检查。
下面的file_upload_limit也可以自行配置,用于配置上传文件个数
 
后台代码,根据项目加入了上传FTP及插入数据库:
        /// 
        /// 文件上传
        /// 
        /// 
        public ActionResult FileUpload()
        {
            HttpPostedFileBase file = Request.Files["Filedata"];
            string fileName = Path.GetFileName(file.FileName);
            string fileExt = Path.GetExtension(fileName);int fileSize = file.ContentLength;
            string msg = string.Empty;
            if (fileExt == ".jpg" || fileExt == ".gif" || fileExt == ".flv" || fileExt == ".mp4")
            {
                //从数据库获取FTP地址
                string serverIP = NVP_FTPServerService.LoadData("DepartmentID", LoginUser.DepartmentID.ToString()).FirstOrDefault().FTPServer;
                string userName = System.Configuration.ConfigurationManager.AppSettings["FTPUserName"];
                string password = System.Configuration.ConfigurationManager.AppSettings["FTPPassword"];
                string dir = "/UploadFile/" + DateTime.Now.ToString() + "/" + fileName;
                string localPath = Request.MapPath(dir);
                Directory.CreateDirectory(Path.GetDirectoryName(localPath));
                file.SaveAs(localPath);
                //上传Ftp
                FtpStatusCode ftpCode = FtpUpload(localPath, null, serverIP, userName, password);
                //删除原文件
                System.IO.File.Delete(localPath);
                if (ftpCode == FtpStatusCode.ClosingData)
                {
                    //录入数据库
                    int count = SaveDataInfo(fileSize, fileName);
                    if (count > 0)
                    {
                        msg = "上传成功";
                    }
                    else
                    {
                        msg = "数据库错误,上传文件信息无法显示";
                    }
                }
                else
                {
                    msg = "FTP服务器错误";
                }
            }
            else
            {
                msg = "上传文件类型错误";
            }
            return Content(msg);
        }

FTP上传部分

 private FtpStatusCode FtpUpload(string sFileDstPath, string FolderName, string ftpServerIP, string ftpUserName, string ftpPwd)
        {
            try
            {
                FileInfo fileInf = new FileInfo(sFileDstPath);
                FtpWebRequest reqFTP;
                FtpWebResponse uploadResponse = null;
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpServerIP + "/" + FolderName + "/" + fileInf.Name));
                reqFTP.Credentials = new NetworkCredential(ftpUserName, ftpPwd);
                reqFTP.KeepAlive = false;
                reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
                reqFTP.UseBinary = true;
                reqFTP.ContentLength = fileInf.Length;
                int buffLength = 2048;
                byte[] buff = new byte[buffLength];
                int contentLen;
                using (FileStream fs = fileInf.OpenRead())
                {
                    using (Stream strm = reqFTP.GetRequestStream())
                    {
                        contentLen = fs.Read(buff, 0, buffLength);
                        while (contentLen != 0)
                        {
                            strm.Write(buff, 0, contentLen);
                            contentLen = fs.Read(buff, 0, buffLength);
                        }
                    }
                }
                uploadResponse = (FtpWebResponse)reqFTP.GetResponse();
                return uploadResponse.StatusCode;
            }
            catch (Exception e)
            {
                return FtpStatusCode.Undefined;
                throw new Exception("Ftp错误", e);
            }
        }
ok,基本的配置就已经完成,但是由于前文说的iis对上传做了限制,所以我们还需要对此进行解除操作。
 
1.在Web.config文件中添加httpRuntime节点
maxRequestLength决定了你要上传文件的最大长度,单位是kb,我随便写了个很大的数。后面两个一个是超时时间和最大请求队列,根据情况自定义设置。
 
2.部署项目后,在iis管理器里
技术分享
技术分享
请求筛选-编辑功能设置
技术分享
技术分享
最大内容长度里面填写在Web.config里面设置的最大长度
以上,所谓的大文件上传功能就基本实现了,你以为完事了?最好玩的才开始。
举个例子,实际项目在上传我们可能要显示上传失败的原因,比如上面的数据库错误,FTP错误等其它问题,因此要修改SWFupload的handler中的js事件,js配置部分:
技术分享
我修改了file_dialog_complete_handler事件,改成了自己写的fileDialogComplete1,比如要在上传前添加些必填信息才可以执行上传,在【选择上传文件弹窗关闭事件】之后确定验证信息是否填写完毕再执行上传。
    function fileDialogComplete1(numFilesSelected, numFilesQueued) {
        try {
            var info = $(‘#info‘).val();
            if (numFilesQueued > 0) {
                if (info == "") {
                    alert("信息不能为空");
                    swfu.cancelUpload();
                    return;
                } 
                //在上传文件中加入自定义参数,用于后台接收处理
                var postParams = {
                    ‘info‘: info
                };
                swfu.setPostParams(postParams);
                if (numFilesSelected > 0) {
                    document.getElementById(this.customSettings.cancelButtonId).disabled = false;
                }
                swfu.startUpload();
            }
        } catch (ex) {
            this.debug(ex);
        }
    }

实际上SWFupload可以玩的事件有很多,在handler.js文件中可以看到,如果需要控制某个事件可以直接修改,具体可见这篇文章:

SWFUpload 2.5.0版 官方说明文档 http://www.cnblogs.com/youring2/archive/2012/07/13/2590010.html

SWFUpload插件+FTP文件上传,我这么玩


推荐阅读
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 在tp5项目中引入ueditor编辑器并实例化后插入图片出现目录创建失败问题在查看网络上各种解决方案之后总结如下:根据官网提示主要是因为图片保存的路径无权限导致,官方文档链接:ht ... [详细]
  • 【爬虫】关于企业信用信息公示系统加速乐最新反爬虫机制
    ( ̄▽ ̄)~又得半夜修仙了,作为一个爬虫小白,花了3天时间写好的程序,才跑了一个月目标网站就更新了,是有点悲催,还是要只有一天的时间重构。升级后网站的层次结构并没有太多变化,表面上 ... [详细]
  • zabbix中文乱码的问题
    在使用zabbix时,有时候会出现中文乱码的问题,如下:因为zabbix自身对中文简体的支持不完善,需要我们手动的去上传新的字体进行替换:1、在windows获取字体库文件在Windows上的 ... [详细]
  • Java大文件HTTP断点续传到服务器该怎么做?
    最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传。这里在简要归纳一下,方便记忆 ... [详细]
  • ASP.NET MVC 小牛之旅3:Routing——网址路由
    网址路由(Routing)在ASP.NETMVC中有两个主要用途,一个用途是匹配通过浏览器传来的HTTP请求,另一个用途则是响应适当的网址给浏览器。3.1匹配通过浏览器传来的HTT ... [详细]
  • PHP操作MySql数据库_PHP教程:链接数据库$conn@mysql_connect(localhost,root,88888888)ordie(链接错误);解决中文乱码mys ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
author-avatar
鱼儿37度半_795
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有