本文章转载于我搭建的ssm博客:http://iclyj.cn/blog/articles/108.html
首先要将虚拟机的nginx和vsftp装好这个我的博客里的淘淘商城系列中有详细的步骤,这里我就不详细说了
看看我的虚拟机ip和nginx启动的情况
接着我们先写service实现的类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
package
com.mmall.service.impl;
import
com.google.common.collect.Lists;
import
com.mmall.service.IFileService;
import
com.mmall.util.FTPUtil;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
org.springframework.stereotype.Service;
import
org.springframework.web.multipart.MultipartFile;
import
java.io.File;
import
java.io.IOException;
import
java.util.UUID;
/**
* Created by lyj on 2017/8/13.
*/
@Service
(
"iFileService"
)
public
class
FileServiceImpl
implements
IFileService {
private
Logger logger = LoggerFactory.getLogger(FileServiceImpl.
class
);
/**
* 图片上传
* @param file
* @param path
* @return
*/
public
String upload(MultipartFile file,String path){
String fileName = file.getOriginalFilename();
//扩展名
//abc.jpg
String fileExtensionName=fileName.substring(fileName.lastIndexOf(
"."
)+
1
);
String uploadFileName= UUID.randomUUID().toString()+
"."
+fileExtensionName;
logger.info(
"开始上传文件,上传文件的文件名:{},上传的路径:{},新文件名:{}"
,fileName,path,uploadFileName);
File fileDir=
new
File(path);
if
(!fileDir.exists()){
fileDir.setWritable(
true
);
fileDir.mkdirs();
}
File targetFile=
new
File(path,uploadFileName);
try
{
//调用
file.transferTo(targetFile);
//文件已经上传成功了
// 将targetFile上传掉我们的FTP服务器上
FTPUtil.uploadFile(Lists.newArrayList(targetFile));
//已经上传到FTP 服务器上
// 上传完之后,删除本地的upload下面的文件
targetFile.delete();
}
catch
(IOException e) {
logger.error(
"上传文件异常"
,e);
return
null
;
}
//A:abc.jpg
//B:abc.jpg
return
targetFile.getName();
}
/**
* 测试方法
* @param args
*/
public
static
void
main(String[] args) {
String fileName=
"abc.jpg"
;
System.out.print(fileName.substring(fileName.lastIndexOf(
"."
)+
1
));
}
}
|
这个实现的的类还要依赖一个FTPUtil类
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
package
com.mmall.util;
import
org.apache.commons.net.ftp.FTPClient;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.IOException;
import
java.util.List;
/**
* Created by lyj on 2017/8/13.
*/
public
class
FTPUtil {
private
static
final
Logger logger = LoggerFactory.getLogger(FTPUtil.
class
);
private
static
String ftpIp = PropertiesUtil.getProperty(
"ftp.server.ip"
);
private
static
String ftpUser = PropertiesUtil.getProperty(
"ftp.user"
);
private
static
String ftpPass = PropertiesUtil.getProperty(
"ftp.pass"
);
public
FTPUtil(String ip,
int
port,String user,String pwd){
this
.ip = ip;
this
.port = port;
this
.user = user;
this
.pwd = pwd;
}
public
static
boolean
uploadFile (List<File> fileList)
throws
IOException{
FTPUtil ftpUtil=
new
FTPUtil(ftpIp,
21
,ftpUser,ftpPass);
logger.info(
"开始连接ftp服务器"
);
boolean
result=ftpUtil.uploadFile(
"img"
,fileList);
logger.info(
"开始连接ftp服务器,结束上传,上传结果:{}"
);
return
result;
}
private
boolean
uploadFile(String remotePath,List<File> fileList)
throws
IOException{
//是否传了图片
boolean
uploaded=
true
;
FileInputStream fis=
null
;
//连接FTP服务器
if
(connectService(
this
.ip,
this
.port,
this
.user,
this
.pwd)){
try
{
//切换文件夹
ftpClient.changeWorkingDirectory(remotePath);
//缓冲
ftpClient.setBufferSize(
1024
);
ftpClient.setControlEncoding(
"utf-8"
);
//设置常量防止乱码
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//打开本地的被动模式
ftpClient.enterLocalActiveMode();
;
for
(File fileItem : fileList) {
fis =
new
FileInputStream(fileItem);
ftpClient.storeFile(fileItem.getName(), fis);
}
}
catch
(IOException e){
logger.error(
"上传文件异常"
,e);
uploaded =
false
;
e.printStackTrace();
}
finally
{
fis.close();
ftpClient.disconnect();
}
}
return
uploaded;
}
//判断FTP服务器是否成功连接
private
boolean
connectService(String ip,
int
port,String user,String pwd){
boolean
isSuccess=
false
;
ftpClient =
new
FTPClient();
try
{
ftpClient.connect(ip);
isSuccess=ftpClient.login(user,pwd);
}
catch
(IOException e) {
logger.error(
"连接FTP服务器失败"
,e);
}
return
isSuccess;
}
private
String ip;
private
int
port;
private
String user;
private
String pwd;
private
FTPClient ftpClient;
public
String getIp() {
return
ip;
}
public
void
setIp(String ip) {
this
.ip = ip;
}
public
int
getPort() {
return
port;
}
public
void
setPort(
int
port) {
this
.port = port;
}
public
String getUser() {
return
user;
}
public
void
setUser(String user) {
this
.user = user;
}
public
String getPwd() {
return
pwd;
}
public
void
setPwd(String pwd) {
this
.pwd = pwd;
}
public
FTPClient getFtpClient() {
return
ftpClient;
}
public
void
setFtpClient(FTPClient ftpClient) {
this
.ftpClient = ftpClient;
}
}
|
到这逻辑层就已经完成了
看看控制层
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@RequestMapping
(
"upload.do"
)
@ResponseBody
public
ServerResponse upload(HttpSession session,
@RequestParam
(value =
"upload_file"
,required =
false
) MultipartFile file, HttpServletRequest request) {
User user = (User) session.getAttribute(Const.CURRENT_USER);
if
(user ==
null
) {
return
ServerResponse.createByErrorCodeMessage(ResponseCode.NEED_LOGIN.getCode(),
"用户未登录,请登录管理员"
);
}
if
(iUserService.checkAdminRole(user).isSuccess()) {
String path = request.getSession().getServletContext().getRealPath(
"upload"
);
String targetFileName = iFileService.upload(file, path);
String url = PropertiesUtil.getProperty(
"ftp.server.http.prefix"
) + targetFileName;
Map fileMap = Maps.newHashMap();
fileMap.put(
"uri"
, targetFileName);
fileMap.put(
"url"
, url);
return
ServerResponse.createBySuccess(fileMap);
}
else
{
return
ServerResponse.createByErrorMessage(
"无权限操作"
);
}
}
|
这里我们看到一个PropertiesUtil类,而这个类正是读取mmall.properties里的图片服务器配置的类
看看结构
mmall.properties的配置
填写自己虚拟机的ip
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
PropertiesUtil类
package
com.mmall.util;
import
org.apache.commons.lang3.StringUtils;
import
org.slf4j.Logger;
import
org.slf4j.LoggerFactory;
import
java.io.IOException;
import
java.io.InputStreamReader;
import
java.util.Properties;
/**
* Created by lyj on 2017/8/13.
*/
public
class
PropertiesUtil {
private
static
Logger logger = LoggerFactory.getLogger(PropertiesUtil.
class
);
private
static
Properties props;
/**
* 调用文件是最先执行“static{}”
*/
static
{
String fileName =
"mmall.properties"
;
props =
new
Properties();
try
{
props.load(
new
InputStreamReader(PropertiesUtil.
class
.getClassLoader().getResourceAsStream(fileName),
"UTF-8"
));
}
catch
(IOException e) {
logger.error(
"配置文件读取异常"
,e);
}
}
public
static
String getProperty(String key){
String value = props.getProperty(key.trim());
if
(StringUtils.isBlank(value)){
return
null
;
}
return
value.trim();
}
public
static
String getProperty(String key,String defaultValue){
String value = props.getProperty(key.trim());
if
(StringUtils.isBlank(value)){
value = defaultValue;
}
return
value.trim();
}
}
|
上述一些配置自己一个个的跟着打了一遍记得还是不太熟,得多用,一些固定的配置写法可以留着笔记以后直接调用这也是个不错的学习方法
借下来看看效果吧
图片上传成功,至于登录的是我自己本身的业务需要,只需要去掉控制层的权限验证即可跳过登录
大致的Java整合linux的vsftp图片服务器的上传代码就这么多了,不懂得可以问我
看心情解答咯!