热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

安装vsftp1、首先,安装vsftpdyum-yinstallvsftpd2、验证是否安装成功rpm-qavsft

安装vsftp

1、首先,安装vsftpd

yum -y install vsftpd

2、验证是否安装成功

rpm -qa vsftpd

3、查看vsftp相关配置文件

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文件

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

5、修改vsftpd.conf配置文件

vim /etc/vsftpd/vsftpd.conf

f57d147d502f

image-20201112191932974

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

f57d147d502f

image-20201112192347055

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

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

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

userlist_deny=NO

#被动模式端口范围

pasv_min_port=30000

pasv_max_port=30999

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

useradd ftpuser

passwd ftpuser

#输入两次密码

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

vim /etc/vsftpd/user_list

8、启动FTP服务

systemctl start vsftpd

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

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

ftp://服务器ip地址/

Nginx进行配置

打开nginx配置文件

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

修改以下内容

f57d147d502f

image-20201112200536867

重启nginx:

cd /usr/local/nginx/sbin/

./nginx -s reload

服务器开放端口:9999

Java实现上传图片的功能

1、添加依赖:

commons-net

commons-net

3.6

2、application.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:用于上传文件的工具类

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、用于生成随机图片名

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

/**

* 上传图片

*/

@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、测试

Insert title here

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

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


推荐阅读
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • MVC设计模式的介绍和演化过程
    本文介绍了MVC设计模式的基本概念和原理,以及在实际项目中的演化过程。通过分离视图、模型和控制器,实现了代码的解耦和重用,提高了项目的可维护性和可扩展性。详细讲解了分离视图、分离模型和分离控制器的具体步骤和规则,以及它们在项目中的应用。同时,还介绍了基础模型的封装和控制器的命名规则。该文章适合对MVC设计模式感兴趣的读者阅读和学习。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 本文介绍了使用postman进行接口测试的方法,以测试用户管理模块为例。首先需要下载并安装postman,然后创建基本的请求并填写用户名密码进行登录测试。接下来可以进行用户查询和新增的测试。在新增时,可以进行异常测试,包括用户名超长和输入特殊字符的情况。通过测试发现后台没有对参数长度和特殊字符进行检查和过滤。 ... [详细]
author-avatar
萱璇妍幽
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有