Vue前端获取文件,后端Java获取文件后上传到FTP服务器上

详细获取不展示,只展示主要功能实现

Vue前端上传文件控件:
页面展示:
在这里插入图片描述
vue前端界面代码:

<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()); 

你可能感兴趣的:(前端,vue.js,java,ftp)