1. 程式人生 > >cool-2018-01-17-java+nginx+ftp實現圖片上傳和下載

cool-2018-01-17-java+nginx+ftp實現圖片上傳和下載

                <!-- Apache工具元件 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-io</artifactId>
		</dependency>
		<dependency>
			<groupId>commons-net</groupId>
			<artifactId>commons-net</artifactId>
		</dependency>

第一步:首先新增pom依賴包

對應的資源包下載地址: 資源包下載

第二布:新建測試類FTPTset

@Test
	public void testFtpClient() throws Exception {
		// 建立一個FtpClient物件
		FTPClient ftpClient = new FTPClient();
		// 建立ftp連線, 預設埠是21
		ftpClient.connect("192.168.25.119", 21);
		// 登入ftp伺服器,使用使用者名稱和密碼
		ftpClient.login("ftpuser", "123456");
		// 上傳檔案
		FileInputStream inputStream = new FileInputStream(new File("C:/Users/Administrator/Downloads/timg.jpg"));
		// 設定上傳的路徑
		ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
		//  預設上傳檔案的格式是文字,所以修改檔案的型別為二進位制檔案
		ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
		// 第一個引數: 伺服器端文件名
		// 第二個引數: 上傳文件的inputstream
		ftpClient.storeFile("bg.jpg", inputStream);
		// 關閉連線
		ftpClient.logout();

	}
第三步:封裝工具類
package com.taotao.common.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

/**
 * ftp上傳下載工具類
 * @version 1.0
 */
public class FtpUtil {

	/** 
	 * Description: 向FTP伺服器上傳檔案 
	 * @param host FTP伺服器hostname 
	 * @param port FTP伺服器埠 
	 * @param username FTP登入賬號 
	 * @param password FTP登入密碼 
	 * @param basePath FTP伺服器基礎目錄  /home/ftpuser/www/images
	 * @param filePath FTP伺服器檔案存放路徑。例如分日期存放:/2015/01/01。檔案的路徑為basePath+filePath
	 * @param filename 上傳到FTP伺服器上的檔名 
	 * @param input 輸入流 
	 * @return 成功返回true,否則返回false 
	 */  
	public static boolean uploadFile(String host, int port, String username, String password, String basePath,
			String filePath, String filename, InputStream input) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(host, port);// 連線FTP伺服器
			// 如果採用預設埠,可以使用ftp.connect(host)的方式直接連線FTP伺服器
			ftp.login(username, password);// 登入
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			//切換到上傳目錄
			if (!ftp.changeWorkingDirectory(basePath+filePath)) {
				//如果目錄不存在建立目錄
				String[] dirs = filePath.split("/");
				String tempPath = basePath;
				for (String dir : dirs) {
					if (null == dir || "".equals(dir)) continue;
					tempPath += "/" + dir;
					if (!ftp.changeWorkingDirectory(tempPath)) {
						if (!ftp.makeDirectory(tempPath)) {
							return result;
						} else {
							ftp.changeWorkingDirectory(tempPath);
						}
					}
				}
			}
			//設定上傳檔案的型別為二進位制型別
			ftp.setFileType(FTP.BINARY_FILE_TYPE);
			//上傳檔案
			if (!ftp.storeFile(filename, input)) {
				return result;
			}
			input.close();
			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}
	
	/** 
	 * Description: 從FTP伺服器下載檔案 
	 * @param host FTP伺服器hostname 
	 * @param port FTP伺服器埠 
	 * @param username FTP登入賬號 
	 * @param password FTP登入密碼 
	 * @param remotePath FTP伺服器上的相對路徑 
	 * @param fileName 要下載的檔名 
	 * @param localPath 下載後儲存到本地的路徑 
	 * @return 
	 */  
	public static boolean downloadFile(String host, int port, String username, String password, String remotePath,
			String fileName, String localPath) {
		boolean result = false;
		FTPClient ftp = new FTPClient();
		try {
			int reply;
			ftp.connect(host, port);
			// 如果採用預設埠,可以使用ftp.connect(host)的方式直接連線FTP伺服器
			ftp.login(username, password);// 登入
			reply = ftp.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				ftp.disconnect();
				return result;
			}
			ftp.changeWorkingDirectory(remotePath);// 轉移到FTP伺服器目錄
			FTPFile[] fs = ftp.listFiles();
			for (FTPFile ff : fs) {
				if (ff.getName().equals(fileName)) {
					File localFile = new File(localPath + "/" + ff.getName());

					OutputStream is = new FileOutputStream(localFile);
					ftp.retrieveFile(ff.getName(), is);
					is.close();
				}
			}

			ftp.logout();
			result = true;
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (ftp.isConnected()) {
				try {
					ftp.disconnect();
				} catch (IOException ioe) {
				}
			}
		}
		return result;
	}
	
	public static void main(String[] args) {
		try {  
	        FileInputStream in=new FileInputStream(new File("D:\\temp\\image\\child.jpg"));  
	        boolean flag = uploadFile("192.168.25.119", 21, "ftpuser", "123456", "/home/ftpuser/www/images","/2018/01/17", "child.jpg", in);  
	        System.out.println(flag);  
	    } catch (FileNotFoundException e) {  
	        e.printStackTrace();  
	    }  
	}
}



相關推薦

cool-2018-01-17-java+nginx+ftp實現圖片下載

<!-- Apache工具元件 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>c

純前端表格控制元件SpreadJS與Java結合,實現模板下載等功能

安裝部署: 開發環境: 後臺伺服器端採用 Java 、SpringMVC。 資料儲存到 \demo_web\WEB-INF\FileDatabase.txt 檔案中,不需要依賴DB。 採用 Eclipse Java EE IDE for Web Develope

Java實現FTP檔案的下載

一、前言: 最近剛好需要實現這個功能:實現ftp的上傳和下載。在網上找了下資料,總結了下。直接上程式碼: 二、程式碼示例: 首先使用到的maven依賴: <dependency>     <groupId>commons-net</gro

Java實現檔案下載

上面的博文我寫了Java對檔案操作的功能https://blog.csdn.net/qq_24380635/article/details/83273359,這次記錄一下檔案上傳和下載的功能。看看兩者有什麼不同,就可以知道檔案操作和檔案上傳下載有什麼不同了。我也是一點點懂,也

如何在基於Java的Web專案中實現檔案下載

在Sevlet 3 以前,Servlet API中沒有支援上傳功能的API,因此要實現上傳功能需要引入第三方工具從POST請求中獲得上傳的附件或者通過自行處理輸入流來獲得上傳的檔案,我們推薦使用Apac

Java中的文件下載

獲取 https res 文件內容 tty type() val name 表單 文件上傳原理:   早期的文件上傳機制:     在TCP/IP中。最早出現的文件上傳機制是FTP。他是將文件由客戶端發送到服務器的標準機制。   jsp中的文件上傳機制:     在jsp編

windows、linux通過ftpftp服務器下載

關閉 註意 head ros 實現 des blog family pro 最近需要用到文件的上傳和下載,查看我們使用的系統,發現有一個進程為t_ftpd,懷疑其為一個ftp的守護進程,於是想要用ftp的方式實現。 在windows上使用bat腳本的方式實現: 首先寫一個b

django實現圖片顯示

代碼 ngs 文件路徑 ont 添加 pac pre bubuko contex 首先安裝pillow模塊 在models.py下設置 class Notices(models.Model): NoticeCategory=models.CharField(max_

[Python] socket實現TFTP下載

一、說明   本文主要基於socket實現TFTP檔案上傳與下載。   測試環境:Win10/Python3.5/tftpd64。   tftpd下載:根據自己的環境選擇下載,地址 :http://tftpd32.jounin.net/tftpd32_download.html   主要內容:TFTP

ASP.NET實現檔案下載

###### 本文的開發配置 ###### .NET版本:.NET Framework 4.0 開發環境:Microsoft Visual Studio 2013 瀏覽器:IE、Chrome、FireFox等都行   1、搭建網站結構 建立一個新的目錄

AJAX實現圖片預覽(傳統ajax與jQuery AJAX;帶圖片的表單提交)

  一、通過Servlet3.0和傳統的AJAX實現圖片上傳和預覽          此方法也適用於帶圖片的表單提交         上傳時預覽圖片    

Android Retrofit2.0實現檔案下載

這篇主要介紹retrofit框架的上傳檔案到伺服器和從伺服器下載功能的實現 上傳檔案到伺服器 首先 retrofit2.0之前上傳檔案到伺服器需要一個叫TypedFile這個類,但是在2.0版本,這個類被取消了,因為2.0以後,retrofit內部集成了okhttp

spring實現檔案下載 完整方案

1. 簡介 提供基於spring實現檔案(筆記附件)的上傳和下載的完整方案。方案將檔案上傳,並將檔名稱作為欄位與關聯的筆記繫結在一起,更新筆記在資料庫中的記錄。顯示筆記時,根據筆記所繫結的檔名生成下載

layui實現圖片 預覽功能

效果如下: HTML 的程式碼: <div class="box" style="width: 180px;float: left;"> <div class="layui-upload"> <div class="layui-ro

SpringBoot實現檔案下載

SpringBoot後臺如何實現檔案上傳下載? 最近做的一個專案涉及到檔案上傳與下載。前端上傳採用百度webUploader外掛。有關該外掛的使用方法還在研究中,日後整理再記錄。本文主要介紹SpringBoot後臺對檔案上傳與下載的處理。 單檔案上傳 // 單檔案上傳 @RequestMapp

django 實現圖片顯示操作

版本: django 2.0.1 python 3.6.2 準備工作: pip install pillow 安裝python圖片處理庫 pillow pip

Retrofit實現檔案下載【二】

概述 通過前一篇的部落格介紹,我們已經對Retrofit的使用有了一個大概的瞭解,今天來講講利用Retrofit進行檔案的上傳和下載 檔案上傳 伺服器使用的是SSH框架,因此這裡是以struts2的方式來獲取資料的,我這裡定義了三個欄位用來接收上傳過來

基於tobato的fastdfs與spring boot整合實現檔案下載

專案結構: pom.xml檔案新增配置: <!-- fastdfs --> <dependency> <groupId>com.github.tobato</groupId> <artifactId>fastd

在SpringMVC框架中實現檔案下載

首先在springmvc.xml中配置檔案上傳的屬性 <!-- 檔案上傳的屬性值 --> <bean id="multipartResolver" class="org.springframework.web.multi

Android中關於FTP的檔案下載

package ryancheng.example.progressbar; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; impo