centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载
1:安裝NFS
(1)安裝
yum install nfs-utils rpcbind
(2)啟動(dòng)rpcbind服務(wù)
systemctl restart rpcbind.service
查看服務(wù)狀態(tài)
systemctl status rpcbind.service
查看rpc
lsof -i :111
netstat -lntup|grep rpcbind
(3)啟動(dòng)NFS服務(wù)
systemctl start nfs.service
查看狀態(tài)
systemctl status nfs.service
查看rpc注冊(cè)的端口信息
rpcinfo -p localhost
(4)啟動(dòng)順序一定是rpcbind->nfs,否則有可能出現(xiàn)錯(cuò)誤
systemctl start rpcbind.service
systemctl enable rpcbind.service
systemctl start nfs.service
systemctl enable nfs.service
(5)配置端口
nfs除了主程序端口2049和rpcbind的端口111是固定以外,還會(huì)使用一些隨機(jī)端口,以下配置將定義這些端口,以便配置防火墻。
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 #查看共享參數(shù)
2:Windows10系統(tǒng)下面掛載測(cè)試
C:\Users\yan>mount \\192.168.0.XXX\home\wzh\nfs\ x:
x: 現(xiàn)已成功連接到 \\192.168.0.XXX\home\wzh\nfs\
命令已成功完成。
C:\Users\yan>
3:解決客戶端無(wú)法寫入的問(wèn)題
[wzh@centos-oracle ~]$ chmod 777 nfs/
4:通過(guò)Java進(jìn)行文件上傳下載
(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服務(wù)器
* @param path NFS 存儲(chǔ)的相對(duì)路徑
* @param fileName 文件名稱包括文件后綴
* @param content 文件二進(jìn)制內(nèi)容
* @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("/");//去掉第一個(gè)/之后進(jìn)行分割處理
StringBuilder p = new StringBuilder();
//首先判斷目錄是否存在,如果不存在則進(jìn)行創(chuàng)建目錄
for(String s:paths){
p.append("/").append(s);
Nfs3File filePath = new Nfs3File(nfs3, p.toString());
if (!filePath.exists()) {
filePath.mkdir(nfsSetAttr);
}
}
//創(chuàng)建文件
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)測(cè)試類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實(shí)現(xiàn)文件上傳下載
喜歡的朋友可以關(guān)注下,粉絲也缺. 今天發(fā)現(xiàn)已經(jīng)有很久沒(méi)有給大家分享一篇技術(shù)文章了,于是想了一下給大家分享一篇java實(shí)現(xiàn)文件上傳下載功能的文章,不喜歡的希望大家勿噴. 想必大家都知道文件的上傳前端頁(yè)面 ...
java+大文件上傳下載
文件上傳下載,與傳統(tǒng)的方式不同,這里能夠上傳和下載10G以上的文件.而且支持?jǐn)帱c(diǎn)續(xù)傳. 通常情況下,我們?cè)诰W(wǎng)站上面下載的時(shí)候都是單個(gè)文件下載,但是在實(shí)際的業(yè)務(wù)場(chǎng)景中,我們經(jīng)常會(huì)遇到客戶需要批量下載的場(chǎng) ...
java web 文件上傳下載
文件上傳下載案例: 首先是此案例工程的目錄結(jié)構(gòu):
FasfDFS整合Java實(shí)現(xiàn)文件上傳下載功能實(shí)例詳解
https://www.jb51.net/article/120675.htm 在上篇文章給大家介紹了FastDFS安裝和配置整合Nginx-1.13.3的方法,大家可以點(diǎn)擊查看下. 今天使用Java ...
FasfDFS整合Java實(shí)現(xiàn)文件上傳下載
文章目錄 ????一 : 添加配置文件 ????二 : 加載配置文件 ????????1. 測(cè)試加載配置文件 ????????2. 輸出配置文件 ????三:功能實(shí)現(xiàn) ????????1.初始化連接信 ...
Java web文件上傳下載
[版權(quán)申明:本文系作者原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處] 文章出處:http://blog.csdn.net/sdksdk0/article/details/52048666 作者:朱培 ID:sdksdk0 郵 ...
fastDFS與java整合文件上傳下載
準(zhǔn)備 下載fastdfs-client-java源碼 源碼地址 密碼:s3sw 修改pom.xml 第一個(gè)plugins是必需要的,是maven用來(lái)編譯的插件,第二個(gè)是maven打源碼包的,可以不要. ...
java 實(shí)現(xiàn)文件上傳下載以及查看
項(xiàng)目的目錄結(jié)構(gòu) 代碼 ?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 ...
隨機(jī)推薦
SQL Server 2012 聯(lián)機(jī)叢書離線安裝
昨日根據(jù)微軟官網(wǎng)的方式安裝SQL Server 2012 聯(lián)機(jī)叢書報(bào)錯(cuò),無(wú)法安裝: 聯(lián)機(jī)叢書下載位置及安裝方式: 按照給出的方式安裝,無(wú)法完成,錯(cuò)誤如下:
從Paxos到ZooKeeper-二、ZooKeeper和Paxos
ZooKeeper為分布式應(yīng)用提供了高效且可靠的分布式協(xié)調(diào)服務(wù),提供了諸如tong'yi統(tǒng)一命名服務(wù).配置管理和分布式鎖等分布式的基礎(chǔ)服務(wù).在解決分布式數(shù)據(jù)一致性方面,ZooKeeper并沒(méi)有直接采用 ...
HDU 4858 項(xiàng)目管理 分塊
題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid=4858 題解: 下面說(shuō)一個(gè)插入查詢時(shí)間復(fù)雜度為sqrt(m)的算法: 對(duì)每個(gè)點(diǎn)定義兩個(gè)值:val,su ...
The 2015 China Collegiate Programming Contest D.Pick The Sticks hdu 5543
Pick The Sticks Time Limit: 15000/10000 MS (Java/Others)????Memory Limit: 65535/65535 K (Java/Others ...
運(yùn)用加密技術(shù)保護(hù)Java源代碼/定制ClassLoader
為什么要加密? 對(duì)于傳統(tǒng)的C或C++之類的語(yǔ)言來(lái)說(shuō),要在Web上保護(hù)源代碼是很容易的,只要不發(fā)布它就可以.遺憾的是,Java程序的源代碼很容易被別人偷看.只要有一個(gè)反編譯器,任何人都可以分析別人的代碼 ...
Unity3D ShaderLab 各向異性高光
Unity3D?ShaderLab?各向異性高光 各向異性時(shí)一種模擬物體表面溝槽方向性的高光反射類型,它會(huì)修改或延伸垂直方向上的高光.當(dāng)我們想模擬金屬拉絲高光的時(shí)候,它非常適合.下面就一步一步實(shí)現(xiàn). ...
整理的一些免費(fèi)的Android項(xiàng)目實(shí)戰(zhàn)系列視頻教程
http://blog.itpub.net/29737144/viewspace-1212539/
(轉(zhuǎn)帖)BootStrap入門教程 (三)
上講回顧:Bootstrap的基礎(chǔ)CSS(Base CSS)提供了優(yōu)雅,一致的多種基礎(chǔ)Html頁(yè)面要素,包括排版,表格,表單,按鈕等,能夠滿足前端工程師的基本要素需求. Bootstrap作為完整 ...
關(guān)于High-Resolution Timer(了解)
如果一個(gè)系統(tǒng)包含高精度性能計(jì)數(shù)器(HRPC,high-resolution performance counter)則此系統(tǒng)提供高精度定時(shí)器.你可以使用API函數(shù)QueryPerformanceFre ...
wpa_supplicant 移植及 linux 命令行模式配置無(wú)線上網(wǎng)
本文涉及內(nèi)容為linux 命令行模式配置無(wú)線上網(wǎng) 及 wpa_supplicant 移植到開(kāi)發(fā)板的過(guò)程,僅供參考. 1.源碼下載 wpa_supplicant 源碼下載地址 :http://hosta ...
總結(jié)
以上是生活随笔為你收集整理的centos nfs java_CentOS下安装配置NFS并通过Java进行文件上传下载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: pos刷卡机怎么安装
- 下一篇: java file构造方法_Java中F