SpringBoot + docker 遇到图片上传路径获取不到的问题
最近在做项目时需要做一个图片上传功能。本以为自信满满手到擒来,没料到用docker发布springboot项目里有坑首先服务器是linux。图片的路径是 /data/resource/family丢了张图片进去,访问链接,可以打开OK。然后写java代码传图片,大概是这样的。public static boolean upload(MultipartFile file, S...
最近在做项目时需要做一个图片上传功能。本以为自信满满手到擒来,没料到用docker发布springboot项目里有坑
首先服务器是linux。
图片的路径是 /data/resource/family
丢了张图片进去,访问链接,可以打开OK。
然后写java代码传图片,大概是这样的。
public static boolean upload(MultipartFile file, String path, String fileName) {
//使用原文件名
String realPath = path + "/" + fileName;
File dest = new File(realPath);
//判断文件父目录是否存在
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdir();
logger.error("File not Exits");
}
logger.debug("File Exits");
try {
//保存文件
file.transferTo(dest);
return true;
} catch (IllegalStateException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
然后打包 docker丢服务器。美滋滋。然而,错误来了。
java.io.FileNotFoundException: \data\resource\family\haha (系统找不到指定的路径。)
一番检查也没发现路径什么的写错了,本地win系统测试也没问题,一打包往docker丢就出问题。
网上也没有解决方案,于是慢慢查。仔细看了下docker的介绍。
然后不用docker部署,直接把jar传到服务器运行没有任何问题。
原来是docker容器内无法获得宿主机根目录,是这个问题,然后找半天也没找到如何获得根目录的方法。
没有办法只能另辟蹊径。
用java-ftp上传。
linux搭建ftp传送门:https://blog.csdn.net/qq_18881987/article/details/99497897
ftp - java代码
//ftp服务器ip地址
private static final String FTP_ADDRESS = "xxxx";
//端口号
private static final int FTP_PORT = 21;
//用户名
private static final String FTP_USERNAME = "xxx";
//密码
private static final String FTP_PASSWORD = "xxx";
//图片路径
public static final String FTP_BASEPATH = "/xx/xx/xx/";
public static boolean uploadFile( String filename, InputStream input) {
boolean result = false;
FTPClient ftp = new FTPClient();
try {
int reply;
ftp.connect(FTP_ADDRESS, FTP_PORT);// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(host)的方式直接连接FTP服务器
ftp.login(FTP_USERNAME, FTP_PASSWORD);// 登录
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return result;
}
//切换到上传目录
if (!ftp.changeWorkingDirectory(FTP_BASEPATH)) {
//如果目录不存在创建目录
String[] dirs = FTP_BASEPATH.split("/");
String tempPath = FTP_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.enterLocalPassiveMode();
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;
}
ok,docker容器内上传图片问题处理完毕。
更多推荐
所有评论(0)