centos nfs 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:\Users\yan>mount \\192.168.0.XXX\home\wzh\nfs\ x:

x: 现已成功连接到 \\192.168.0.XXX\home\wzh\nfs\

命令已成功完成。

C:\Users\yan>

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;

}

}

java实现文件上传下载

喜欢的朋友可以关注下,粉丝也缺. 今天发现已经有很久没有给大家分享一篇技术文章了,于是想了一下给大家分享一篇java实现文件上传下载功能的文章,不喜欢的希望大家勿喷. 想必大家都知道文件的上传前端页面 ...

java&plus;大文件上传下载

文件上传下载,与传统的方式不同,这里能够上传和下载10G以上的文件.而且支持断点续传. 通常情况下,我们在网站上面下载的时候都是单个文件下载,但是在实际的业务场景中,我们经常会遇到客户需要批量下载的场 ...

java web 文件上传下载

文件上传下载案例: 首先是此案例工程的目录结构:

FasfDFS整合Java实现文件上传下载功能实例详解

https://www.jb51.net/article/120675.htm 在上篇文章给大家介绍了FastDFS安装和配置整合Nginx-1.13.3的方法,大家可以点击查看下. 今天使用Java ...

FasfDFS整合Java实现文件上传下载

文章目录     一 : 添加配置文件     二 : 加载配置文件         1. 测试加载配置文件         2. 输出配置文件     三:功能实现         1.初始化连接信 ...

Java web文件上传下载

[版权申明:本文系作者原创,转载请注明出处] 文章出处:http://blog.csdn.net/sdksdk0/article/details/52048666 作者:朱培 ID:sdksdk0 邮 ...

fastDFS与java整合文件上传下载

准备 下载fastdfs-client-java源码 源码地址 密码:s3sw 修改pom.xml 第一个plugins是必需要的,是maven用来编译的插件,第二个是maven打源码包的,可以不要. ...

java 实现文件上传下载以及查看

项目的目录结构 代码  IOUtils.java package cn.edu.zyt.util; import java.io.IOException; import java.io.InputSt ...

Jsch - java SFTP 文件上传下载

使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...

随机推荐

SQL Server 2012 联机丛书离线安装

昨日根据微软官网的方式安装SQL Server 2012 联机丛书报错,无法安装: 联机丛书下载位置及安装方式: 按照给出的方式安装,无法完成,错误如下:

从Paxos到ZooKeeper-二、ZooKeeper和Paxos

ZooKeeper为分布式应用提供了高效且可靠的分布式协调服务,提供了诸如tong'yi统一命名服务.配置管理和分布式锁等分布式的基础服务.在解决分布式数据一致性方面,ZooKeeper并没有直接采用 ...

HDU 4858 项目管理 分块

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4858 题解: 下面说一个插入查询时间复杂度为sqrt(m)的算法: 对每个点定义两个值:val,su ...

The 2015 China Collegiate Programming Contest D&period;Pick The Sticks hdu 5543

Pick The Sticks Time Limit: 15000/10000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others ...

运用加密技术保护Java源代码&sol;定制ClassLoader

为什么要加密? 对于传统的C或C++之类的语言来说,要在Web上保护源代码是很容易的,只要不发布它就可以.遗憾的是,Java程序的源代码很容易被别人偷看.只要有一个反编译器,任何人都可以分析别人的代码 ...

Unity3D ShaderLab 各向异性高光

Unity3D ShaderLab 各向异性高光 各向异性时一种模拟物体表面沟槽方向性的高光反射类型,它会修改或延伸垂直方向上的高光.当我们想模拟金属拉丝高光的时候,它非常适合.下面就一步一步实现. ...

整理的一些免费的Android项目实战系列视频教程

http://blog.itpub.net/29737144/viewspace-1212539/

&lpar;转帖&rpar;BootStrap入门教程 &lpar;三&rpar;

上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整 ...

关于High-Resolution Timer&lpar;了解&rpar;

如果一个系统包含高精度性能计数器(HRPC,high-resolution performance counter)则此系统提供高精度定时器.你可以使用API函数QueryPerformanceFre ...

wpa&lowbar;supplicant 移植及 linux 命令行模式配置无线上网

本文涉及内容为linux 命令行模式配置无线上网 及 wpa_supplicant 移植到开发板的过程,仅供参考. 1.源码下载 wpa_supplicant 源码下载地址 :http://hosta ...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值