详细获取不展示,只展示主要功能实现
<el-form-item label="附件上传" prop="filelist">
<!--<el-input v-model="CoFormData.filelist" style="width: 200px"></el-input>
<el-button size="small" type="primary" @click="fileuploadBtn">点击上传</el-button> -->
<el-upload class="upload-component"
:auto-upload="false"
:show-file-list="true"
:file-list="uploadFileList"
:data="fileUploadFormData"
:beforeUpload="(file) => beforeAvatarUpload(file, item, fileList)"
:on-change="filechangeUpload"
:on-exceed="filehandleExceed"
:on-error="fileuploadError"
:limit="3"
v-model="CoFormData.filelist"
accept=".jpg,.gif,.png,.txt,.doc,.docx,.pdf,.xls,.xlsx">
<el-button size="small" type="primary">选择文件</el-button>
<span style="margin-left:6px;">(文件类型为:jpg,gif,png,txt,doc,docx,pdf,xls,xlsx;文件大小最大10M;且最多上传3个文件)</span>
</el-upload>
</el-form-item>
Vue前端界面实现选择文件方法:
/**
* 上传附件限制数量提示
*/
filehandleExceed(files, fileList) {
this.$message.warning('上传组件限制选择3个文件,请删除选择文件再上传!');
},
beforeAvatarUpload(file, item, fileList) {
//参数
let uploadParams = {
componentName: self.uploadForm.componentName,
componentImplName: self.uploadForm.componentImplName,
componentDesc: self.uploadForm.componentDesc,
containerType: self.uploadForm.containerType,
file: self.uploadForm.file
};
Object.assign(self.uploadForm, uploadParams);
},
/**
* 上传附件失败
*/
fileuploadError(response, file, fileList) {
this.$message({
type:'error',
message:'上传失败',
duration:'1500',
offset:50
});
},
/**
* 上传附件
*/
filechangeUpload(file, fileList){
const self = this;
const isLt10M = file.size / 1024 / 1024 < 10; //小于10MB
//限制:.jpg,.gif,.png,.txt,.doc,.docx,.pdf,.xls,.xlsx
const fileTypeArr = ['jpg','gif','png','txt','doc','docx','pdf','xls','xlsx'];
if (!fileTypeArr.includes(file.name.split('.')[file.name.split('.').length-1])) {
self.$message({
type:'error',
message:'文件支持:.jpg,.gif,.png,.txt,.doc,.docx,.pdf,.xls,.xlsx格式',
duration:'1500',
offset:50
});
self.uploadFileList = fileList;
return false;
}
if (!isLt10M) {
self.$message({
type:'error',
message:"上传文件大小不能超过10MB!",
duration:'1500',
offset:50
});
self.uploadFileList = fileList;
self.CoFormData.filelist = '';
return false;
}
self.uploadFileList = fileList;
let name = [];
self.uploadFileList.forEach(function (item, index) {
name.push(item.name);
});
self.CoFormData.filelist = name.join(',');
self.$refs['CoFormData'].validate((valid) => {});
},
后端实现代码部分:
ftp工具类:
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPFile;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
/**
*
* @author
*/
@Component
public class FtpOperUtil {
/**
* 上传文件
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器保存目录
* @param fileName 上传到FTP服务器后的文件名称
* @param inputStream 输入文件流
* @return
*/
public static boolean uploadFile(String hostname, int port, String username, String password, String pathname, String fileName, InputStream inputStream){
boolean flag = false;
FTPClient ftpClient = new FTPClient();
ftpClient.setControlEncoding("UTF-8");
try {
//连接FTP服务器
ftpClient.connect(hostname, port);
//ftp端口的打开和关闭
ftpClient.enterLocalPassiveMode();
//登录FTP服务器
ftpClient.login(username, password);
//是否成功登录FTP服务器
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
return flag;
}
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.makeDirectory(pathname);
ftpClient.changeWorkingDirectory(pathname);
ftpClient.storeFile(fileName, inputStream);
inputStream.close();
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally{
if(ftpClient.isConnected()){
try {
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return flag;
}
/**
* 上传文件(可对文件进行重命名)
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器保存目录
* @param filename 上传到FTP服务器后的文件名称
* @param originfilename 待上传文件的名称(绝对地址)
* @return
*/
public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String filename, String originfilename){
boolean flag = false;
try {
InputStream inputStream = new FileInputStream(new File(originfilename));
flag = uploadFile(hostname, port, username, password, pathname, filename, inputStream);
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 上传文件(不可以进行文件的重命名操作)
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器保存目录
* @param originfilename 待上传文件的名称(绝对地址)
* @return
*/
public static boolean uploadFileFromProduction(String hostname, int port, String username, String password, String pathname, String originfilename){
boolean flag = false;
try {
String fileName = new File(originfilename).getName();
InputStream inputStream = new FileInputStream(new File(originfilename));
flag = uploadFile(hostname, port, username, password, pathname, fileName, inputStream);
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
/**
* 删除文件
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器保存目录
* @param filename 要删除的文件名称
* @return
*/
public static boolean deleteFile(String hostname, int port, String username, String password, String pathname, String filename){
boolean flag = false;
FTPClient ftpClient = new FTPClient();
try {
//连接FTP服务器
ftpClient.connect(hostname, port);
//登录FTP服务器
ftpClient.login(username, password);
//验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
return flag;
}
//切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
ftpClient.dele(filename);
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally{
if(ftpClient.isConnected()){
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
/**
* 下载文件
* @param hostname FTP服务器地址
* @param port FTP服务器端口号
* @param username FTP登录帐号
* @param password FTP登录密码
* @param pathname FTP服务器文件目录
* @param filename 文件名称
* @param localpath 下载后的文件路径
* @return
*/
public static boolean downloadFile(String hostname, int port, String username, String password, String pathname, String filename, String localpath){
boolean flag = false;
FTPClient ftpClient = new FTPClient();
try {
//连接FTP服务器
ftpClient.connect(hostname, port);
//登录FTP服务器
ftpClient.login(username, password);
//验证FTP服务器是否登录成功
int replyCode = ftpClient.getReplyCode();
if(!FTPReply.isPositiveCompletion(replyCode)){
return flag;
}
//切换FTP目录
ftpClient.changeWorkingDirectory(pathname);
FTPFile[] ftpFiles = ftpClient.listFiles();
for(FTPFile file : ftpFiles){
if(filename.equalsIgnoreCase(file.getName())){
File localFile = new File(localpath + "/" + file.getName());
OutputStream os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os);
os.close();
}
}
ftpClient.logout();
flag = true;
} catch (Exception e) {
e.printStackTrace();
} finally{
if(ftpClient.isConnected()){
try {
ftpClient.logout();
} catch (IOException e) {
}
}
}
return flag;
}
}
在service层调用上传文件的方法:
//file.getInputStream() 是获取前端的文件流
FtpOperUtil.uploadFile('你的ftp ip','端口', '用户', '密码', '存放的ftp目录', '存储文件名', file.getInputStream());