BS文件夹上传操作(二) ——基本功能实现
上篇《BS文件夹上传操作 》大概说明了我所需要的需求,
接着上次的命题:
“如果有一个需求,要求你在BS上实现文件夹上传操作功能?你该如何实现?”
ActiveX?Js插件?自定义控件 还是……
再看下需求:
客户端选择任一文件夹上传到服务器中,在服务器上建立相关文件夹且相应文件上传到相应的文件夹中。
操作:选择任意一个文件夹上传 文件夹中相关文件也上传
出来的效果:
主要源码:
/// <summary>/// 导入->确定 方法/// </summary>/// <param name="path"></param> [DirectMethod]public void GetPath(string readPath) { string storePath = @"C:\Documents and Settings\Administrator\桌面\Test\"; //目标目录 string strFile = FolderHelper.FindFileByPath(readPath, storePath); CommonMethod.Show("", strFile, Ext.Net.MessageBox.Icon.INFO); }
FolderHelper
/// <summary>/// 根据路径获取该文件夹下文件/// </summary>/// <param name="readPath">文件读取路径</param>/// <param name="storePath">文件存储路径</param>/// <returns>导入成功,失败</returns> public static string FindFileByPath(string readPath, string storePath) {try { DirectoryInfo diInfo = new DirectoryInfo(readPath); //上传 DirectoryInfo diInfoStore = new DirectoryInfo(storePath + diInfo.Name);//存储 if (!diInfoStore.Exists)//存储到指定路径判断文件夹不存在则新建 diInfoStore.Create(); FileSystemInfo[] fsInfo = diInfo.GetFileSystemInfos();//获取该目录下所有文件和子目录 foreach (FileSystemInfo fs in fsInfo)//遍历数组 {if (fs is FileInfo)//文件 {byte[] file = FileToBinary(fs.FullName); BinaryToFile(storePath + diInfo.Name, fs.Name, file); }if (fs is DirectoryInfo)//文件夹 { FindFileByPath(fs.FullName, storePath + diInfo.Name + "\\"); } }return "导入成功"; }catch (Exception) {return "导入失败"; } }/// <summary>/// 将文件转换为二进制流进行读取/// </summary>/// <param name="fileName">文件完整名路径</param>/// <returns>文件二进制流</returns> private static byte[] FileToBinary(string fileName) { FileStream fsRead = new FileStream(fileName, FileMode.Open, FileAccess.Read);try {if (fsRead.CanRead) {int fsSize = Convert.ToInt32(fsRead.Length);byte[] btRead = new byte[fsSize]; fsRead.Read(btRead, 0, fsSize);return btRead; }else {throw new Exception("文件读取错误!"); } }catch (Exception ex) {throw new Exception(ex.Message); }finally { fsRead.Close(); } } /// <summary>/// 将二进制流转换为对应的文件进行存储/// </summary>/// <param name="storePath">存储文件名的路径</param>/// <param name="fileName">文件名</param>/// <param name="btBinary">二进制流</param> private static void BinaryToFile(string storePath, string fileName, byte[] binary) { FileStream fsWrite = new FileStream(storePath + "\\" + fileName, FileMode.Create, FileAccess.Write);try {if (fsWrite.CanWrite) { fsWrite.Write(binary, 0, binary.Length); } }catch (Exception ex) {throw new Exception(ex.Message); }finally { fsWrite.Close(); } }
基本的上传功能实现,但是牺牲了安全性,抽空试试Left join.G 提供的帮助ActiveX。在这也感谢园中两位朋友的Left join.G和sunriseyuen。
谢谢
作者:PEPE
出处:http://pepe.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
BS文件夹上传操作(二) ——基本功能实现相关推荐
- vue文件夹上传组件选哪个好?
一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传: 支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输 ...
- vue文件夹上传源码
一. 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传: 支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传.刷新页面后继续传输 ...
- SpringMVC文件夹上传解决方案
本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...
- 拖拽文件夹上传 一(基于Vue的文件夹上传组件)
前言 首先说一下,小弟第一次写文章,如果有什么错误 还望小哥哥 小姐姐多多包涵.如果有什么缺陷还望大家指出来 让小弟多学习. 内容划分 上传文件夹一共分两部分来写 一方面怕太长了 大家看五分钟就不想看 ...
- java 文件下载 组件_java文件夹上传下载组件
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. *如何分片: *如何合成一个文件: *中断了从哪个分片开始. ...
- java+http文件夹上传
在web项目中上传文件夹现在已经成为了一个主流的需求.在OA,或者企业ERP系统中都有类似的需求.上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便.能够提供更高级的应用支撑. ...
- 文件上传控件-如何上传文件-文件夹上传
需求: 项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在20G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以20G来进行限制. PC端全平台支持,要求支持Window ...
- 多文件上传,文件夹上传
前言 当您需要上传多个文件时,您可能会发现自己需要一种方法来处理多个上传任务.在某些情况下,您可能需要一次性上传所有文件.在其他情况下,您可能希望对文件进行排队以便逐个上传. 在本文中,我将介绍如何使 ...
- 基于layui.upload.js 拖拽文件/文件夹上传下载
layui.upload.js 拖拽文件/文件夹上传下载 前言 js代码 页面使用(我这里用的是uploader.jsp) CSS文件 上传效果 总结 前言 项目需求完成文件上传,可以拖拽上传文件/文 ...
最新文章
- Git如何将本地分支推送到远程库中
- 生成docker镜像
- How to hide index.php on nginx
- different behavior dialog popup display no
- 【C++编程题1】数组指针之字符串排序
- java 字符码_Java字符编码
- 将一个项目中的图片存到另一个项目中_复盘一个Smart200小项目(2)
- php 检验类,php实现的简单检验登陆类
- android 按下缩小效果松开恢复_22省份三季报:粤苏总量差距缩小,19省份实现正增长...
- 「leetcode」C++题解:20. 有效的括号,括号匹配是使用栈解决的经典问题
- Overleaf 指南:30 分钟 LaTeX 入门
- 计算机组成原理10——建立数据通路
- 推荐几款好用的网站CMS管理系统
- get请求中文乱码处理方法
- js渲染引擎 tempo.js
- 关于无法完全停止windowsUpdate的解决方法
- convert_variables_to_constants()
- python中shelf对象_11.4. shelve — Python 对象持久化 — Python 2.7.18 文档
- [软件测试]怎么测试一个杯子
- 写点看Harvard CS50 公开课的感受
热门文章
- 【转载】C#扫盲之:==/Equals /ReferenceEquals 异同的总结,相等性你真的知道吗?
- 从Google的PaaS平台说起,解析中美Docker生态圈
- 美国光伏发电市场是否稳定?电池板价格降至40美分/W!
- 在Ubuntu中使用远程桌面
- IPsec在企业网中的应用
- 【S1官方核心】18128核心纯净雅黑H大全力打造的1.9精品
- PHP版本VC6与VC9/VC11/VC14、Thread Safe与None-Thread Safe等的区别
- Educational Codeforces Round 4 C. Replace To Make Regular Bracket Sequence 栈
- hadoop之MapReduce框架TaskTracker端心跳机制分析(源码分析第六篇)
- Effective java笔记3--类和接口2