zoukankan      html  css  js  c++  java
  • 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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


    作者:PEPE
    出处:http://pepe.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    XAML学习笔记之Layout(五)——ViewBox
    XAML学习笔记——Layout(三)
    XAML学习笔记——Layout(二)
    XAML学习笔记——Layout(一)
    从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
    从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
    从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
    Sql Server 2012 事务复制遇到的问题及解决方式
    Sql Server 2008R2升级 Sql Server 2012 问题
    第一次ACM
  • 原文地址:https://www.cnblogs.com/PEPE/p/2352567.html
Copyright © 2011-2022 走看看