java通过FTP连接到NAS服务器
1.搭建一個(gè)NAS服務(wù)器
新手教程:https://post.smzdm.com/p/a3gw7q27/
這篇文章我只進(jìn)行到第二大步,第三步配置DDNS,安裝應(yīng)用程序,我沒(méi)有實(shí)現(xiàn),連不上網(wǎng)絡(luò)。
2.外網(wǎng)訪問(wèn)
在加了一些相關(guān)群之后,我了解到了需要如何才能外網(wǎng)訪問(wèn)NAS,也就是第三步。
步驟如下
如上圖,公網(wǎng)IP需要給連接網(wǎng)絡(luò)所在運(yùn)營(yíng)商(聯(lián)通,電信,移動(dòng))去申請(qǐng),這個(gè)申請(qǐng)其實(shí)還是比較麻煩的,那么就只能是改公網(wǎng)IP,目前我沒(méi)有找到改公網(wǎng)IP的辦法,所以上圖中的方式也就不行了。
2.1 使用內(nèi)網(wǎng)穿透連接NAS
花生殼我就不多介紹了,能玩NAS,肯定也知道花生殼。
花生殼是可以分配一個(gè)域名給用戶使用的,外網(wǎng)端口一般也是隨機(jī)生成的。
內(nèi)網(wǎng)主機(jī):也就是NAS服務(wù)器的內(nèi)網(wǎng)IP,端口為21。
3.設(shè)置NAS文件傳輸器
因?yàn)榛ㄉ鷼び成涞亩丝谑亲兓?#xff0c;通常在10000-30000之間
4.通過(guò)FTP連接到NAS服務(wù)器。上傳文件
import org.apache.commons.net.ftp.FTPClient; import org.apache.log4j.Logger;import java.io.*;/*** 通過(guò)FTP上傳文件** @Author lvhaibao* @Date 2018/2/11 21:43*/ public class FTPTools {//用于打印日志private static final Logger log = Logger.getLogger(FTPTools.class);//設(shè)置私有不能實(shí)例化private FTPTools() {}/*** 上傳** @param hostname ip或域名地址* @param port 端口* @param username 用戶名* @param password 密碼* @param workingPath 服務(wù)器的工作目* @param inputStream 要上傳文件的輸入流* @param saveName 設(shè)置上傳之后的文件名* @return*/public static boolean upload(String hostname, int port, String username, String password, String workingPath, InputStream inputStream, String saveName) {boolean flag = false;FTPClient ftpClient = new FTPClient();//1 測(cè)試連接if (connect(ftpClient, hostname, port, username, password)) {try {//2 檢查工作目錄是否存在if (ftpClient.changeWorkingDirectory(workingPath)) {// 3 檢查是否上傳成功if (storeFile(ftpClient, saveName, inputStream)) {flag = true;disconnect(ftpClient);}}} catch (IOException e) {log.error("工作目錄不存在");e.printStackTrace();disconnect(ftpClient);}}return flag;}/*** 斷開(kāi)連接** @param ftpClient* @throws Exception*/public static void disconnect(FTPClient ftpClient) {if (ftpClient.isConnected()) {try {ftpClient.disconnect();log.error("已關(guān)閉連接");} catch (IOException e) {log.error("沒(méi)有關(guān)閉連接");e.printStackTrace();}}}/*** 測(cè)試是否能連接** @param ftpClient* @param hostname ip或域名地址* @param port 端口* @param username 用戶名* @param password 密碼* @return 返回真則能連接*/public static boolean connect(FTPClient ftpClient, String hostname, int port, String username, String password) {boolean flag = false;try {//ftp初始化的一些參數(shù)ftpClient.connect(hostname, port);ftpClient.enterLocalPassiveMode();ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);ftpClient.setControlEncoding("UTF-8");if (ftpClient.login(username, password)) {log.info("連接ftp成功");flag = true;} else {log.error("連接ftp失敗,可能用戶名或密碼錯(cuò)誤");try {disconnect(ftpClient);} catch (Exception e) {e.printStackTrace();}}} catch (IOException e) {log.error("連接失敗,可能ip或端口錯(cuò)誤");e.printStackTrace();}return flag;}/*** 上傳文件** @param ftpClient* @param saveName 全路徑。如/home/public/a.txt* @param fileInputStream 要上傳的文件流* @return*/public static boolean storeFile(FTPClient ftpClient, String saveName, InputStream fileInputStream) {boolean flag = false;try {if (ftpClient.storeFile(saveName, fileInputStream)) {flag = true;log.error("上傳成功");disconnect(ftpClient);}} catch (IOException e) {log.error("上傳失敗");disconnect(ftpClient);e.printStackTrace();}return flag;}public static void main(String[] args) throws FileNotFoundException {String hostname = "ip";int port = 端口;String username = "nas賬戶";String password = "nas密碼";String workingPath = "/NAS/images/";String str = "C:\\Users\\43834\\Desktop\\1.png";InputStream fileInputStream = new FileInputStream(new File(str));String saveName = "1.png";System.out.println(FTPTools.upload( hostname, port, username, password, workingPath, fileInputStream, saveName));} }如果只是內(nèi)網(wǎng)下使用NAS,那么可以直接輸入NAS IP+端口 ,這樣速度很快。
外網(wǎng)就需要映射的url+端口了!
總結(jié)
以上是生活随笔為你收集整理的java通过FTP连接到NAS服务器的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c语言 圆周率10000位,圆周率(小数
- 下一篇: Android开发笔记之视频录制