zoukankan      html  css  js  c++  java
  • CentOS下安装配置NFS并通过Java进行文件上传下载

    1:安装NFS

    (1)安装

    yum install nfs-utils rpcbind

    (2)启动rpcbind服务

    systemctl restart rpcbind.service

    查看服务状态  

    systemctl status rpcbind.service

    查看rpc

    lsof -i :111

    netstat -lntup|grep rpcbind

    (3)启动NFS服务

    systemctl start nfs.service

    查看状态

    systemctl status nfs.service

    查看rpc注册的端口信息

    rpcinfo -p localhost

    (4)启动顺序一定是rpcbind->nfs,否则有可能出现错误

    systemctl start rpcbind.service

    systemctl enable rpcbind.service

    systemctl start nfs.service

    systemctl enable nfs.service

    (5)配置端口

    nfs除了主程序端口2049和rpcbind的端口111是固定以外,还会使用一些随机端口,以下配置将定义这些端口,以便配置防火墙。

    MOUNTD_PORT=4001  

    STATD_PORT=4002

    LOCKD_TCPPORT=4003

    LOCKD_UDPPORT=4003

    RQUOTAD_PORT=4004

    (6)配置

    /home/wzh/nfs    192.168.0.0/24(rw,sync,insecure,no_root_squash)

    /home/wzh/nfs    192.168.3.0/24(rw,sync,insecure,no_root_squash)

    exportfs -r  #重载exports配置

    exportfs -v  #查看共享参数

    2:Windows10系统下面挂载测试

    C:Usersyan>mount \192.168.0.XXXhomewzh fs x:

    x: 现已成功连接到 \192.168.0.XXXhomewzh fs

    命令已成功完成。

    C:Usersyan>

    3:解决客户端无法写入的问题

    [wzh@centos-oracle ~]$ chmod 777 nfs/

    4:通过Java进行文件上传下载

    (1)工具包

    commons-lang-2.6.jar
    netty-3.2.8.Final.jar
    nfs-client-1.0.3.jar
    slf4j-api-1.7.25.jar

    (2)NfsUtil.java

    package com.test;
    
    import com.emc.ecs.nfsclient.nfs.NfsCreateMode;
    import com.emc.ecs.nfsclient.nfs.NfsSetAttributes;
    import com.emc.ecs.nfsclient.nfs.io.Nfs3File;
    import com.emc.ecs.nfsclient.nfs.io.NfsFileInputStream;
    import com.emc.ecs.nfsclient.nfs.io.NfsFileOutputStream;
    import com.emc.ecs.nfsclient.nfs.nfs3.Nfs3;
    import com.emc.ecs.nfsclient.rpc.CredentialUnix;
    import java.io.BufferedInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.IOException;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    /**
     * @作者 y
     * @版本 V1.0
     * @描述 NFS工具类
     */
    public class NfsUtil {
        private static final String NFS_IP = "192.168.0.XXX";
        private static final String NFS_DIR = "/home/wzh/nfs";
        
        /**
         * 上传文件到NFS服务器
         * @param path   NFS 存储的相对路径
         * @param fileName 文件名称包括文件后缀
         * @param content   文件二进制内容
         * @return 
         */
        public static boolean upload(String path, String fileName, byte []content){
            NfsFileOutputStream outputStream = null;
            
            NfsSetAttributes nfsSetAttr = new NfsSetAttributes();
            nfsSetAttr.setMode((long) (0x00100 + 0x00080 + 0x00040 + 0x00020 + 0x00010 + 0x00008 + 0x00004 + 0x00002));
            
            try {
                Nfs3 nfs3 = new Nfs3(NFS_IP, NFS_DIR, new CredentialUnix(-2, -2, null), 3);
                String paths[] = path.substring(1).split("/");//去掉第一个/之后进行分割处理
    
                StringBuilder p = new StringBuilder();
                
                //首先判断目录是否存在,如果不存在则进行创建目录
                for(String s:paths){
                    p.append("/").append(s);
                    Nfs3File filePath = new Nfs3File(nfs3, p.toString());
                    if (!filePath.exists()) {
                        filePath.mkdir(nfsSetAttr);
                    }
                }
                
                
                //创建文件
                Nfs3File desFile = new Nfs3File(nfs3, path+"/"+fileName);
                desFile.create(NfsCreateMode.GUARDED, nfsSetAttr, null);
                
                outputStream = new NfsFileOutputStream(desFile);
                outputStream.write(content);
                
                return true;
            } catch (IOException ex) {
                Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex);
            } finally{
                if(null!=outputStream){
                    try {
                        outputStream.close();
                    } catch (IOException ex) {
                        Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
            
            return false;
        }
        
        /**
         * 文件下载
         * @param filePath NFS上面的文件路径信息
         * @return 
         */
        public static byte[] download(String filePath){
            ByteArrayOutputStream bos = null;
           
            NfsFileInputStream inputStream = null;
            BufferedInputStream bis = null;
            
            try {
                Nfs3 nfs3 = new Nfs3(NFS_IP, NFS_DIR, new CredentialUnix(-2, -2, null), 3);
                Nfs3File file = new Nfs3File(nfs3, filePath);
            
                inputStream = new NfsFileInputStream(file);
                
                bis = new BufferedInputStream(inputStream);
                bos = new ByteArrayOutputStream();
                
                int date = -1;
                while ((date = bis.read()) != -1) {
                    bos.write(date);
                }
                
                return bos.toByteArray();
            } catch (IOException ex) {
                Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex);
            } finally{
                if(null!=bos){
                    try {
                        bos.close();
                    } catch (IOException ex) {
                        Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                
                if(null!=bis){
                    try {
                        bis.close();
                    } catch (IOException ex) {
                        Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                
                if(null!=inputStream){
                    try {
                        inputStream.close();
                    } catch (IOException ex) {
                        Logger.getLogger(NfsUtil.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
            
            return null;
        }
    }

    (3)测试类FileTest.java

    package com.test;
    
    import java.io.BufferedOutputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    /**
     * @作者 y
     * @版本 V1.0
     * @描述 
     */
    public class FileTest {
    
        public static void main(String[] args) {
            String fileName = "wszm.pdf";
            int hashcode = fileName.hashCode();
            int dir1 = hashcode & 0xf;  //0--15
            int dir2 = (hashcode & 0xf0) >> 4;  //0-15
            String path = "/" + dir1 + "/" + dir2;
            
            byte []file = fileToBytes("G:\tmp\wszm.pdf");
            boolean flag = NfsUtil.upload(path, fileName, file);
            System.out.println("flag:"+flag);
            
            for(int i=0;i<3;i++){
                byte []buff = NfsUtil.download("/t01/t001/tt/ssptbin20180613.7z");
                bytesToFile(buff,"G:\tmp\ssptbin20180613"+i+".7z");
            }
            
    
        }
        
        public static void bytesToFile(byte[] buffer, final String filePath){
    
            File file = new File(filePath);
    
            OutputStream output = null;
            BufferedOutputStream bufferedOutput = null;
    
            try {
                output = new FileOutputStream(file);
    
                bufferedOutput = new BufferedOutputStream(output);
    
                bufferedOutput.write(buffer);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally{
                if(null!=bufferedOutput){
                    try {
                        bufferedOutput.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
    
                if(null != output){
                    try {
                        output.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
        
        public static byte[] fileToBytes(String filePath) {
            byte[] buffer = null;
            File file = new File(filePath);
            
            FileInputStream fis = null;
            ByteArrayOutputStream bos = null;
    
            try {
                fis = new FileInputStream(file);
                bos = new ByteArrayOutputStream();
    
                byte[] b = new byte[1024];
    
                int n;
    
                while ((n = fis.read(b)) != -1) {
                    bos.write(b, 0, n);
                }
                
                buffer = bos.toByteArray();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(FileTest.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(FileTest.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                try {
                    if (null != bos) {
                        bos.close();
                    }
                } catch (IOException ex) {
                    Logger.getLogger(FileTest.class.getName()).log(Level.SEVERE, null, ex);
                } finally{
                    try {
                        if(null!=fis){
                            fis.close();
                        }
                    } catch (IOException ex) {
                        Logger.getLogger(FileTest.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
            
            return buffer;
        }
        
    }
  • 相关阅读:
    ny 58 最少步数 (BFS)
    Oracle 参数文件
    Oracle 密码文件
    Oracle 表空间与数据文件
    Oracle 回滚(ROLLBACK)和撤销(UNDO)
    Oracle 控制文件(CONTROLFILE)
    Oracle 联机重做日志文件(ONLINE LOG FILE)
    Oracle 常用目录结构(10g)
    Oracle 归档日志
    instance_name,db_name,oracle_sid之间的关系
  • 原文地址:https://www.cnblogs.com/yshyee/p/9520181.html
Copyright © 2011-2022 走看看