依赖:
依赖:
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
后端:
@RequestMapping("fileUpload")
public ApiRest fileUpload(@RequestBody MultipartFile file) throws Exception {
File filee = MultipartFileToFile.multipartFileToFile(file);
String time = System.currentTimeMillis()+"";
String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
//2、删除本地文件
if (uploadToFtp2(filee,time,suffix)){
System.out.println("上传至ftp服务器!");
}else {
System.out.println("上传至ftp服务器失败!");
}
filee.delete();
return success("http://IP:PORT/exam/img/"+time+"."+suffix);
}
private boolean uploadToFtp2(File file,String time,String suffix){
FTPClient ftpClient = new FTPClient();
try {
//连接ftp服务器 参数填服务器的ip
ftpClient.connect("IP",PORT);
//进行登录 参数分别为账号 密码
ftpClient.login("xxxx","XXXXXX");
//改变工作目录(按自己需要是否改变)
//只能选择local_root下已存在的目录
String[] imgList = {"jpg","png","gif","jpeg","bmp"};
String[] videoList = {"mp4","avi"};
if(Arrays.stream(imgList).anyMatch(body -> suffix.equalsIgnoreCase(body))){
ftpClient.changeWorkingDirectory("/exam/img/");
}else if(Arrays.stream(videoList).anyMatch(body -> suffix.equalsIgnoreCase(body))){
ftpClient.changeWorkingDirectory("/exam/video/");
}else{
ftpClient.changeWorkingDirectory("/exam/other/");
}
//设置文件类型为二进制文件
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
//开启被动模式(按自己如何配置的ftp服务器来决定是否开启)
ftpClient.enterLocalPassiveMode();
String server_path = time+"."+suffix;
long c = System.currentTimeMillis();
InputStream input = new FileInputStream(file);
OutputStream out = ftpClient.storeFileStream(server_path);
byte[] byteArray = new byte[4096];
int read = 0;
while((read = input.read(byteArray)) != -1){
out.write(byteArray,0, read);
}
out.close();
input.close();
file.delete();
long b = System.currentTimeMillis();
System.out.println("上传用时: "+(b-c)+"ms");
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
}
文件转换工具类
public class MultipartFileToFile {
/**
* MultipartFile 转 File
*
* @param file
* @throws Exception
*/
public static File multipartFileToFile(MultipartFile file) throws Exception {
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
file = null;
} else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
}
return toFile;
}
//获取流文件
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 删除本地临时文件
* @param file
*/
public static void delteTempFile(File file) {
if (file != null) {
File del = new File(file.toURI());
del.delete();
}
}
}