根据项目的开发要求,使用ftp实现上传图片,通过nginx搭建图片服务器,即对nginx的简单功能的一种应用。
关于vsftp和nginx的安装就不在这里详细演示,下面的代码是关于nginx.conf的配置,即将ftp上传的图片路径映射到nginx.conf中。
下面介绍代码是如何实现上传图片的。
jar包的引入
- <!-- 时间操作组件 -->
- <dependency>
- <groupId>joda-time</groupId>
- <artifactId>joda-time</artifactId>
- </dependency>
- <!-- Apache工具组件 -->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-lang3</artifactId>
- </dependency>
- <!-- 处理io流的工具 -->
- <dependency>
- <groupId>org.apache.commons</groupId>
- <artifactId>commons-io</artifactId>
- </dependency>
- <!--tomcat上传到服务器工具 -->
- <dependency>
- <groupId>commons-net</groupId>
- <artifactId>commons-net</artifactId>
- </dependency>
- public void testFtpClient() throws Exception{
- //创建ftpClient对象
- FTPClient ftpClient= new FTPClient();
- //创建ftp链接,默认是21端口
- ftpClient.connect("192.168.*.*",21);
- //登录ftp服务器,使用用户名和密码
- ftpClient.login("ftpuser", "**");
- //上传文件
- //读取本地文件
- FileInputStream inputStream=new FileInputStream(new File("H:\\04 美丽记忆\\2015鸟巢\\IMG_20150716_010643.JPG"));
- //设置上传的路径
- ftpClient.changeWorkingDirectory("/home/ftpuser/www/images");
- //修改上传格式
- ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
- //第一个参数:服务器端文档名
- //第二个参数,上传文档的inputStream
- ftpClient.storeFile("rest.png", inputStream);
- //关闭链接
- ftpClient.logout();
- }
- public class FtpUtil {
- /**
- * Description: 向FTP服务器上传文件
- * @param host FTP服务器hostname
- * @param port FTP服务器端口
- * @param username FTP登录账号
- * @param password FTP登录密码
- * @param basePath FTP服务器基础目录
- * @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;
- }
- }