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

  • 相关阅读:
    channels的使用
    paramiko模块(远程操作服务器)
    GIT版本管理工具教程
    Python中的魔术方法详解(双下方法)
    Django中Q查询及Q()对象
    Python3操作Excel
    漏洞复现环境集锦-Vulhub
    CVE-2019-0193 远程命令执行-漏洞复现
    Weblogic-SSRF 漏洞复现
    CVE-2020-0796 永恒之蓝?
  • 原文地址:https://www.cnblogs.com/PEPE/p/2352567.html
Copyright © 2011-2022 走看看