文档章节

上传下载文件实例(vsftp服务器+nginx)

o
 osc_wws45aot
发布于 2019/08/20 15:30
字数 1070
阅读 5
收藏 0

精选30+云产品,助力企业轻松上云!>>>

上传下载文件实例(vsftp服务器+nginx)

页面(上传+下载)

<form action="/pic/upload" enctype="multipart/form-data" method="post">

<input type="text" name="username"><br>

<input type="password" name="password"><br>

<input type="file" name="pic"><br>

<input type="submit" value="提交">

</form>

 

写实体类(pojo

public class User {

private Integer uid;

private String username;

private String password;

private String picture;}}

 

 

mapper接口

public interface UserMapper {

int insert(User record);

 

List<User> select();

}

 

mapper.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

<mapper namespace="com.example.dao.UserMapper">

<insert id="insert" parameterType="User">

insert into imageupload(username,password,picture) values

(#{username,jdbcType=CHAR},#{password,jdbcType=CHAR},#{picture,jdbcType=CHAR})

</insert>

 

<select id="select" resultMap="User">

select * from imageupload

</select>

</mapper>

 

UserService

public interface UserService {

public void insertUser(User user);

 

public List<User> selectUser();

}

UserServiceImpl

@Service

public class UserServiceImpl implements UserService{

@Autowired(required=true)

private UserMapper userMapper;

 

@Override

public void insertUser(User user) {

userMapper.insert(user);

 

}

 

@Override

public List<User> selectUser() {

return userMapper.select();

}

 

}

 

 

写工具类IDUtils(用来生成文件名)

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;

}

}

 

 

写操作文件上传下载类FtpUtils

public class FtpUtils {

/**

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

 * @param host FTP服务器ip

 * @param port FTP服务器端口

 * @param username FTP登录账号

 * @param password FTP登录密码

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

 * @param filePath FTP服务器文件存放路径。例如分日期存放:、2018/05/28.文件的路径为basePath+filePath

 * @param fileName 上传到F服务器上的文件名

 * @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();//返回最后一个FTP应答的应答代码的整数值。

System.out.println("reply="+reply);

if(!FTPReply.isPositiveCompletion(reply)) {//如果应答代码是一个正完成响应(以2开头的230),则为True;如果不是,则为false。

ftp.disconnect();

return result;

}

if(!ftp.changeWorkingDirectory(basePath+fileName)) {//如果目录不存在的话就创建目录

String[] dirs=filePath.split("/");

String tempPath=basePath;///home/ftpuser/images

for(String dir:dirs) {

if(null==dir||"".equals(dir)) {

continue;

}

tempPath+=""+dir;

if(!ftp.changeWorkingDirectory(tempPath)) {//如果更改FTP会话的当前工作目录失败

if(!ftp.makeDirectory(tempPath)) {//如果创建一个新的子目录失败的话。

return result;//返回false

}else {

ftp.changeWorkingDirectory(tempPath);//如果创建成功则更改FTP会话的当前工作目录

}

}

}//整合for循环是为了

}//整个if是为了创建设置的目录

//设置为被动模式

ftp.enterLocalPassiveMode();

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

ftp.setFileType(FTP.BINARY_FILE_TYPE);

//上传文件

if(!ftp.storeFile(fileName, input)) {//读取本地文件失败

return result;

}

input.close();

ftp.logout();//通过发送QUIT命令退出FTP服务器

result=true;

} catch (IOException e) {

e.printStackTrace();

}finally {

if(ftp.isConnected()) {//如果客户机当前连接到服务器

try {

ftp.disconnect();//关闭到FTP服务器的连接,并将连接参数恢复到默认值。

} catch (IOException e) {

e.printStackTrace();

}

}

}

return result;

}

}

 

 

 

些控制台类UserController

@Controller

public class UserController {

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

private int port;//端口

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

private String userName;//用户名

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

private String passWord;//密码

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

private String basePath;//文件在服务器端保存的主目录

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

private String baseUrl;//访问图片时的基础url

 

@Autowired

private UserService userService;

@RequestMapping("/test")

public String index() {

return "index";

}

 

 

@RequestMapping("/pic/upload")

@ResponseBody

public String pictureUpload2(@RequestParam("pic")MultipartFile uploadFile,@RequestParam("username")String username,@RequestParam("password")String password) {

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

try {

//获取原始文件名

String oldName = uploadFile.getOriginalFilename(); //返回客户机文件系统中的原始文件名。

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

String newName=IDUtils.genImageName();

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

//生成文件在服务器daunt存储的子目录

String filePath=new Date().toString();

//服务器ip

String host="192.168.172.128";

//把前端输入信息,包括图片的url保存到数据库

User user=new User();

user.setUsername(username);

user.setPassword(password);

user.setPicture(baseUrl+"/"+filePath+"/"+newName);

userService.insertUser(user);

//把图片上传搭配图片服务器

//获取上传的io

InputStream input=uploadFile.getInputStream();

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

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

if(result) {

return "success";

}else {

return "false";

}

} catch (IOException e) {

return "false";

}

}

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
nginx+vsftp搭建图片服务器

前言: 在分布式架构中,往往会有多个tomcat,然后你上传的图片只是在其中的某一个tomcat,你访问时是有集群的tomcat随机提供服务。当你访问的tomcat是有图片的那个时,图片能正常显示,如果恰...

贪挽懒月
2018/05/26
0
0
阿里云上的Centos 7.6的一次Nginx+Mysql+PHP7.3 部署

阿里云申请了一台服务器 Centos 7.6,每次安装都要上网找一大堆教程,因为不熟悉,因为总是忘记。 所以,有时间的时候,还是记录下自己的学习过程,有助于下次的问题解决。 我先总结下: 1)...

osc_9gmn690o
2019/04/03
4
0
Java实现把图片上传到图片服务器(nginx+vsftp)

前言: 在我另一篇笔记中已经记载了如何用nginx + vsftp搭建图片服务器(请参考nginx + vsftp搭建图片服务器),并且用vsftp的客户端工具filezilla测试过已经可用。但是在开发中应该是把用户在前...

贪挽懒月
2018/05/30
0
0
ftp部署及使用

常用软件安装及使用目录 http://www.jb51.net/article/106604.htm ftp部署 本篇文章主要介绍了CentOS7.0下安装FTP服务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随...

osc_91760i21
2019/02/23
1
0
FTP服务器日志解析

FTP服务器日志解析 FTP是老牌的文件传输协议,在网络中应用非常广泛。本节就Vsftp服务器的日志进行重点讨论,在本书的FTP多级跳案例中就会涉及到本节学到的知识。在Redhat Linux系统下Vsftp...

OSSIM
2015/02/04
1.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-07-11

更新时间: 2020-07-11 00:00 Scientists make precise edits to mitochondrial DNA for first time - (nature.com) 科学家首次对线粒体DNA进行精确编辑 得分:66 | 评论:4 LibreOffice: The N......

FalconChen
53分钟前
105
0
是否有可能从另一个git存储库中挑选一个提交? - Is it possible to cherry-pick a commit from another git repository?

问题: I'm working with a git repository that needs a commit from another git repository that knows nothing of the first. 我正在使用一个git存储库,需要从另一个不知道第一个存储库......

技术盛宴
昨天
26
0
【LeetCode】53 盛最多水的容器

题目 解题思路 双指针法: https://leetcode-cn.com/problems/container-with-most-water/solution/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/ 代码 public class Solution { ......

JaneRoad
昨天
20
0
阿里云OSS配置CDN加速

首先购买CDN流量包 然后添加域名 添加好后 然后将域名OSS.xxxx.com 解析到 生成的CDN域名上 这样就完成了

可达鸭眉头一皱
昨天
16
0
js 整数与小数正则替换片段

说明 /(\d+)/g 整数 /(\d+\.\d+)rem/g 小数 /(\d+\.\d+|\d+)rem/g 其中 | 或 条件 例子 全局查找带 rem 单位的,替换成 px 单位 let text = text.replace(/(\d+\.\d+|\d+)rem/g, function(s......

DrChenXX
昨天
17
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部