• JAVA实现上传下载共享文件


    1、上传下载共享文件需要用到jcifs,先下载相关JAR包(开源项目的源码,demo,文挡、API应有尽有)

    https://jcifs.samba.org/src/

    2、创建共享目录,确定访问用户及密码(用户需要写入权限)

    String url_share_key = "192.16.20.15"; //共享IP
    String url_share_user = "administrator"; //共享用户 需要有写入权限
    String url_share_pwd = "123456"; //密码
    String dir_share_key = "192.16.20.15/test/"; //共享根路径

    3、用户凭证,用户凭证还可以通过远程路径传递(smb://用户名:密码@192.168.0.11/test )

    NtlmPasswordAuthentication auth = new NtlmPasswordAuthentication(url_share_key, url_share_user, url_share_pwd); 

    4、上传

     1    /**
     2      * 从本地上传文件到共享目录
     3      * @param remoteUrl 远程路径
     4      * @param localFilePath 本地路径
     5      * @param auth 用户凭证
     6      */
     7     public static void smbPut(String remoteUrl, String localFilePath,NtlmPasswordAuthentication auth) {
     8         InputStream in = null;
     9         OutputStream out = null;
    10         try {
    11             // 需要上传的文件 取出文件名称
    12             File localFile = new File(localFilePath);
    13             String fileName = localFile.getName();
    14 
    15             // 共享目录 不存在则创建
    16             SmbFile remoteFileDir = new SmbFile(remoteUrl, auth);
    17             if (!remoteFileDir.isDirectory()) {
    18                 remoteFileDir.mkdirs();
    19             }
    20 
    21             // 上传
    22             SmbFile remoteFile = new SmbFile(remoteUrl + File.separator
    23                     + fileName, auth);
    24             in = new BufferedInputStream(new FileInputStream(localFile));
    25             out = new BufferedOutputStream(new SmbFileOutputStream(remoteFile));
    26 
    27             // 缓冲数组
    28             byte[] b = new byte[1024 * 5];
    29             int len;
    30             while ((len = in.read(b)) != -1) {
    31                 out.write(b, 0, len);
    32             }
    33             // 刷新此缓冲的输出流
    34             out.flush();
    35         } catch (Exception e) {
    36             e.printStackTrace();
    37         } finally {
    38             try {
    39                 out.close();
    40                 in.close();
    41             } catch (IOException e) {
    42                 e.printStackTrace();
    43             }
    44         }
    45     }

    5、下载

     1   /**
     2      * 从共享目录拷贝文件到本地
     3      * @param remoteUrl 远程路径
     4      * @param localDir 本地路经
     5      * @param auth
     6      */
     7     public static void smbGet(String remoteUrl, String localDir,NtlmPasswordAuthentication auth) {
     8         InputStream in = null;
     9         OutputStream out = null;
    10         try {
    11             //远程文件
    12             SmbFile remoteFile = new SmbFile(remoteUrl,auth);
    13             if (remoteFile == null) {
    14                 System.out.println("共享文件不存在");
    15                 return;
    16             }
    17             
    18             //创建本地文件并写入
    19             String fileName = remoteFile.getName();
    20             File localFile = new File(localDir + File.separator + fileName);
    21             in = new BufferedInputStream(new SmbFileInputStream(remoteFile));
    22             out = new BufferedOutputStream(new FileOutputStream(localFile));
    23             byte[] buffer = new byte[1024];
    24             while (in.read(buffer) != -1) {
    25                 out.write(buffer);
    26                 buffer = new byte[1024];
    27             }
    28         } catch (Exception e) {
    29             e.printStackTrace();
    30         } finally {
    31             try {
    32                 out.close();
    33                 in.close();
    34             } catch (IOException e) {
    35                 e.printStackTrace();
    36             }
    37         }
    38     }
  • 相关阅读:
    MFC 中 Tooltip 实现的几种方式
    C++11带来的优雅语法
    socket异步编程--libevent的使用
    单元测试与解耦
    Ubuntu(Linux) + mono + jexus +asp.net MVC3
    常见算法总结
    NET里简易实现AOP
    KMP算法
    简易的集群通讯组件
    数据访问层的封装与抽象
  • 原文地址:https://www.cnblogs.com/Nadim/p/4800859.html
Copyright © 2020-2023  润新知