linux安装vsftpt服务,centos安装vsftp服务.md

# 使用nginx和vsftp搭建图片服务器并使用Java上传图片到该图片服务器

## 安装vsftp

1、首先,安装vsftpd

```shell

yum -y install vsftpd

复制代码

```

2、验证是否安装成功

```shell

rpm -qa vsftpd

复制代码

```

3、查看vsftp相关配置文件

```shell

ll /etc/vsftpd/

复制代码

```

`vsftpd.conf`文件是主要的配置文件,一些关键的配置都在其中

`ftpusers`文件是禁止使用vsftpd的用户列表文件,记录不允许访问FTP服务器的用户名单

`user_list`这个文件禁止或允许使用vsftpd的用户列表文件,这个文件中指定的用户缺省情况(即在`vsftpd.conf`中设置`userlist_deny=YES`)下也不能访问FTP服务器,在设置了`userlist_deny=NO`时,仅允许`user_list`中指定的用户访问FTP服务器

4、先备份一份vsftpd.conf文件

```shell

cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd-default.conf

复制代码

```

5、修改vsftpd.conf配置文件

```shell

vim /etc/vsftpd/vsftpd.conf

复制代码

```

![image-20201112191932974](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/6292c70bed724e8fa9b2a63153b9a4b1~tplv-k3u1fbpfcp-zoom-1.image)

把`anonymous_enable=YES`改为`NO`,表示不允许匿名访问

![image-20201112192347055](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/61cc935d6d7643dc997692c72bcf9301~tplv-k3u1fbpfcp-zoom-1.image)

然后把`listen=NO`改为`YES`,`listen_ipv6=YES`改为`NO`

再在该文件的最后添加以下数据:

```shell

#仅允许user_list文件中的用户访问FTP服务

userlist_deny=NO

#被动模式端口范围

pasv_min_port=30000

pasv_max_port=30999

复制代码

```

6、创建一个用来登录FTP服务的用户

```shell

useradd ftpuser

passwd ftpuser

#输入两次密码

复制代码

```

7、将ftpuser用户加进user_list文件最后一行

```shell

vim /etc/vsftpd/user_list

复制代码

```

8、启动FTP服务

```shell

systemctl start vsftpd

复制代码

```

**9、服务器开放21端口和30000/30999端口范围**

10、浏览器访问测试是否成功:

ftp://服务器ip地址/

## Nginx进行配置

打开nginx配置文件

```shell

vim /usr/local/nginx/conf/nginx.conf

复制代码

```

修改以下内容

![image-20201112200536867](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/2d95f94d7dfa486297d6aca27602ba2a~tplv-k3u1fbpfcp-zoom-1.image)

重启nginx:

```shell

cd /usr/local/nginx/sbin/

./nginx -s reload

复制代码

```

**服务器开放端口:9999**

## Java实现上传图片的功能

1、添加依赖:

```xml

commons-net

commons-net

3.6

复制代码

```

2、application.properties配置文件添加以下内容:

```properties

#配置文件上传器

spring.servlet.multipart.max-file-size=100MB

spring.servlet.multipart.max-request-size=100MB

#ftp相关配置

#服务器地址

FTP.ADDRESS=192.168.xx.xxx

#FTP服务端口,默认是21

FTP.PORT=21

#访问FTP服务的用户名

FTP.USERNAME=ftpuser

#访问FTP服务的用户名对应的密码

FTP.PASSWORD=ftpuser

#图片存放在服务器指定的文件夹

FTP.BASEPATH=/home/ftpuser/images

#访问图片的基本url,如果端口号为80就不用加端口,192,168.xx.xxx为服务器ip地址

IMAGE.BASE.URL=http://192.168.xx.xxx:9999/images

复制代码

```

3、FtpUtils:用于上传文件的工具类

```java

public class FtpUtil {

/**

* Description: 向FTP服务器上传文件

* @param host FTP服务器ip

* @param port FTP服务器端口

* @param username FTP登录账号

* @param password FTP登录密码

* @param basePath FTP服务器基础目录,/home/ftpuser/images

* @param filename 上传到FTP服务器上的文件名

* @param input 输入流

* @return 成功返回true,否则返回false

*/

public static boolean uploadFile(String host, int port, String username, String password, String basePath,

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;

}

//设置为被动模式

ftp.enterLocalPassiveMode();

//设置编码格式为utf-8

ftp.setControlEncoding("UTF-8");

//设置上传文件的类型为二进制类型

ftp.setFileType(FTP.BINARY_FILE_TYPE);

//设置存储图片的文件夹

ftp.changeWorkingDirectory(basePath);

//上传文件

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;

}

}

复制代码

```

4、用于生成随机图片名

```java

public class IDUtils {

/**

* 生成随机图片名

*/

public static String genImageName() {

//取当前时间的长整形值包含毫秒

long millis = System.currentTimeMillis();

//long millis = System.nanoTime();

//加上三位随机数

Random random = new Random();

int end3 = random.nextInt(999);

//如果不足三位前面补0

String str = millis + String.format("%03d", end3);

return str;

}

}

复制代码

```

5、上传图片的Controller

```java

/**

* 上传图片

*/

@Controller

@RequestMapping("/admin")

public class UploadController {

@Value("${FTP.ADDRESS}")

private String host;

// 端口

@Value("${FTP.PORT}")

private int port;

// ftp用户名

@Value("${FTP.USERNAME}")

private String userName;

// ftp用户密码

@Value("${FTP.PASSWORD}")

private String passWord;

// 文件在服务器端保存的主目录

@Value("${FTP.BASEPATH}")

private String basePath;

// 访问图片时的基础url

@Value("${IMAGE.BASE.URL}")

private String baseUrl;

/**

* 上传图片到服务器

* @param uploadFile

* @return

*/

@PostMapping("/upload/file")

public String pictureUpload(@RequestParam("file") MultipartFile file) {

try {

//1、给上传的图片生成新的文件名

//1.1获取原始文件名

String oldName = file.getOriginalFilename();

//1.2使用IDUtils工具类生成新的文件名,新文件名 = newName + 文件后缀

String newName = IDUtils.genImageName();

newName = newName + oldName.substring(oldName.lastIndexOf("."));

//2、把图片上传到图片服务器

//2.1获取上传的io流

InputStream input = file.getInputStream();

//2.2调用FtpUtil工具类进行上传

boolean result = FtpUtil.uploadFile(host, port, userName, passWord, basePath, newName, input);

if(result) {

//返回给前端图片访问路径

return baseUrl+"/"+newName;

}else {

return "false";

}

} catch (IOException e) {

e.printStackTrace();

return "false";

}

}

}

复制代码

```

6、测试

```html

Insert title here

复制代码

```

7、提交图片后后端会返回一个图片路径,复制到地址栏看看是否能访问

到此,使用java上传图片就完成了。

一键复制

编辑

Web IDE

原始数据

按行查看

历史

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值