国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

詳解SpringMVC使用MultipartFile實(shí)現(xiàn)文件的上傳

2019-11-26 13:22:07
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

如果需要實(shí)現(xiàn)跨服務(wù)器上傳文件,就是將我們本地的文件上傳到資源服務(wù)器上,比較好的辦法就是通過(guò)ftp上傳。這里是結(jié)合SpringMVC+ftp的形式上傳的。我們需要先懂得如何配置springMVC,然后在配置ftp,最后再結(jié)合MultipartFile上傳文件。

springMVC上傳需要幾個(gè)關(guān)鍵jar包,spring以及關(guān)聯(lián)包可以自己配置,這里主要說(shuō)明關(guān)鍵的jar包

1:spring-web-3.2.9.RELEASE.jar (spring的關(guān)鍵jar包,版本可以自己選擇)

2:commons-io-2.2.jar (項(xiàng)目中用來(lái)處理IO的一些工具類包)

配置文件

SpringMVC是用MultipartFile來(lái)進(jìn)行文件上傳的,因此我們先要配置MultipartResolver,用于處理表單中的file

<!-- 上傳文件解釋器 -->   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">     <property name="defaultEncoding" value="utf-8" />     <property name="maxUploadSize" value="10485760" />     <property name="maxInMemorySize" value="4096" />     <property name="resolveLazily" value="true" />   </bean> 

其中屬性詳解:

defaultEncoding配置請(qǐng)求的編碼格式,默認(rèn)為iso-8859-1

maxUploadSize配置文件的最大單位,單位為字節(jié)

maxInMemorySize配置上傳文件的緩存 ,單位為字節(jié)

resolveLazily屬性啟用是為了推遲文件解析,以便在UploadAction 中捕獲文件大小異常

頁(yè)面配置

在頁(yè)面的form中加上enctype="multipart/form-data"

<form id="" name="" method="post" action="" enctype="multipart/form-data">  

表單標(biāo)簽中設(shè)置enctype="multipart/form-data"來(lái)確保匿名上載文件的正確編碼。

是設(shè)置表單的MIME編碼。默認(rèn)情況,這個(gè)編碼格式是application/x-www-form-urlencoded,不能用于文件上傳;只有使用了multipart/form-data,才能完整的傳遞文件數(shù)據(jù),進(jìn)行下面的操作。enctype="multipart/form-data"是上傳二進(jìn)制數(shù)據(jù)。form里面的input的值以2進(jìn)制的方式傳過(guò)去,所以request就得不到值了。

編寫上傳控制類

編寫一個(gè)上傳方法,這里沒(méi)有返回結(jié)果,需要跳轉(zhuǎn)頁(yè)面或者返回其他值可以將void改為String、Map<String,Object>等值,再return返回結(jié)果。

    /**  * 上傳  * @param request  * @return  */ @ResponseBody @RequestMapping(value = "/upload", method = {RequestMethod.GET, RequestMethod.POST}) public void upload(HttpServletRequest request) {   MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;   MultipartFile file = multipartRequest.getFile("file");//file是頁(yè)面input的name名   String basePath = "文件路徑"   try {     MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());       if (resolver.isMultipart(request)) {       String fileStoredPath = "文件夾路徑";       //隨機(jī)生成文件名       String randomName = StringUtil.getRandomFileName();       String uploadFileName = file.getOriginalFilename();       if (StringUtils.isNotBlank(uploadFileName)) {         //截取文件格式名         String suffix = uploadFileName.substring(uploadFileName.indexOf("."));         //重新拼裝文件名         String newFileName = randomName + suffix;         String savePath = basePath + "/" + newFileName;         File saveFile = new File(savePath);         File parentFile = saveFile.getParentFile();         if (saveFile.exists()) {           saveFile.delete();         } else {           if (!parentFile.exists()) {             parentFile.mkdirs();           }         }         //復(fù)制文件到指定路徑         FileUtils.copyInputStreamToFile(file.getInputStream(), saveFile);         //上傳文件到服務(wù)器         FTPClientUtil.upload(saveFile, fileStoredPath);       }     }   } catch (Exception e) {     e.printStackTrace();   } } 

FTP客戶端上傳工具

package com.yuanding.common.util;  import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import java.util.HashMap; import java.util.Map; import java.util.Properties;  import org.apache.commons.lang.StringUtils; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.slf4j.Logger; import org.slf4j.LoggerFactory;  /**  * FTP客戶端工具  */ public class FTPClientUtil {    /**    * 日志    */   private static final Logger LOGGER = LoggerFactory.getLogger(FTPClientUtil.class);    /**    * FTP server configuration--IP key,value is type of String    */   public static final String SERVER_IP = "SERVER_IP";    /**    * FTP server configuration--Port key,value is type of Integer    */   public static final String SERVER_PORT = "SERVER_PORT";    /**    * FTP server configuration--ANONYMOUS Log in key, value is type of Boolean    */   public static final String IS_ANONYMOUS = "IS_ANONYMOUS";    /**    * user name of anonymous log in    */   public static final String ANONYMOUS_USER_NAME = "anonymous";    /**    * password of anonymous log in    */   public static final String ANONYMOUS_PASSWORD = "";    /**    * FTP server configuration--log in user name, value is type of String    */   public static final String USER_NAME = "USER_NAME";    /**    * FTP server configuration--log in password, value is type of String    */   public static final String PASSWORD = "PASSWORD";    /**    * FTP server configuration--PASV key, value is type of Boolean    */   public static final String IS_PASV = "IS_PASV";    /**    * FTP server configuration--working directory key, value is type of String While logging in, the current directory    * is the user's home directory, the workingDirectory must be set based on it. Besides, the workingDirectory must    * exist, it can not be created automatically. If not exist, file will be uploaded in the user's home directory. If    * not assigned, "/" is used.    */   public static final String WORKING_DIRECTORY = "WORKING_DIRECTORY";       public static Map<String, Object> serverCfg = new HashMap<String, Object>();      static Properties prop;      static{     LOGGER.info("開始加載ftp.properties文件!");     prop = new Properties();     try {       InputStream fps = FTPClientUtil.class.getResourceAsStream("/ftp.properties");       prop.load(fps);       fps.close();     } catch (Exception e) {       LOGGER.error("讀取ftp.properties文件異常!",e);     }     serverCfg.put(FTPClientUtil.SERVER_IP, values("SERVER_IP"));     serverCfg.put(FTPClientUtil.SERVER_PORT, Integer.parseInt(values("SERVER_PORT")));     serverCfg.put(FTPClientUtil.USER_NAME, values("USER_NAME"));     serverCfg.put(FTPClientUtil.PASSWORD, values("PASSWORD"));     LOGGER.info(String.valueOf(serverCfg));   }    /**    * Upload a file to FTP server.    *    * @param serverCfg : FTP server configuration    * @param filePathToUpload : path of the file to upload    * @param fileStoredName : the name to give the remote stored file, null, "" and other blank word will be replaced    *      by the file name to upload    * @throws IOException    * @throws SocketException    */   public static final void upload(Map<String, Object> serverCfg, String filePathToUpload, String fileStoredName)       throws SocketException, IOException {     upload(serverCfg, new File(filePathToUpload), fileStoredName);   }    /**    * Upload a file to FTP server.    *    * @param serverCfg : FTP server configuration    * @param fileToUpload : file to upload    * @param fileStoredName : the name to give the remote stored file, null, "" and other blank word will be replaced    *      by the file name to upload    * @throws IOException    * @throws SocketException    */   public static final void upload(Map<String, Object> serverCfg, File fileToUpload, String fileStoredName)       throws SocketException, IOException {     if (!fileToUpload.exists()) {       throw new IllegalArgumentException("File to upload does not exists:" + fileToUpload.getAbsolutePath  ());     }     if (!fileToUpload.isFile()) {       throw new IllegalArgumentException("File to upload is not a file:" + fileToUpload.getAbsolutePath());     }     if (StringUtils.isBlank((String) serverCfg.get(SERVER_IP))) {       throw new IllegalArgumentException("SERVER_IP must be contained in the FTP server configuration.");     }     transferFile(true, serverCfg, fileToUpload, fileStoredName, null, null);   }    /**    * Download a file from FTP server    *    * @param serverCfg : FTP server configuration    * @param fileNameToDownload : file name to be downloaded    * @param fileStoredPath : stored path of the downloaded file in local    * @throws SocketException    * @throws IOException    */   public static final void download(Map<String, Object> serverCfg, String fileNameToDownload, String fileStoredPath)       throws SocketException, IOException {     if (StringUtils.isBlank(fileNameToDownload)) {       throw new IllegalArgumentException("File name to be downloaded can not be blank.");     }     if (StringUtils.isBlank(fileStoredPath)) {       throw new IllegalArgumentException("Stored path of the downloaded file in local can not be blank.");     }     if (StringUtils.isBlank((String) serverCfg.get(SERVER_IP))) {       throw new IllegalArgumentException("SERVER_IP must be contained in the FTP server configuration.");     }     transferFile(false, serverCfg, null, null, fileNameToDownload, fileStoredPath);   }    private static final void transferFile(boolean isUpload, Map<String, Object> serverCfg, File fileToUpload,       String serverFileStoredName, String fileNameToDownload, String localFileStoredPath) throws   SocketException,       IOException {     String host = (String) serverCfg.get(SERVER_IP);     Integer port = (Integer) serverCfg.get(SERVER_PORT);     Boolean isAnonymous = (Boolean) serverCfg.get(IS_ANONYMOUS);     String username = (String) serverCfg.get(USER_NAME);     String password = (String) serverCfg.get(PASSWORD);     Boolean isPASV = (Boolean) serverCfg.get(IS_PASV);     String workingDirectory = (String) serverCfg.get(WORKING_DIRECTORY);     FTPClient ftpClient = new FTPClient();     InputStream fileIn = null;     OutputStream fileOut = null;     try {       if (port == null) {         LOGGER.debug("Connect to FTP server on " + host + ":" + FTP.DEFAULT_PORT);         ftpClient.connect(host);       } else {         LOGGER.debug("Connect to FTP server on " + host + ":" + port);         ftpClient.connect(host, port);       }       int reply = ftpClient.getReplyCode();       if (!FTPReply.isPositiveCompletion(reply)) {         LOGGER.error("FTP server refuses connection");         return;       }        if (isAnonymous != null && isAnonymous) {         username = ANONYMOUS_USER_NAME;         password = ANONYMOUS_PASSWORD;       }       LOGGER.debug("Log in FTP server with username = " + username + ", password = " + password);       if (!ftpClient.login(username, password)) {         LOGGER.error("Fail to log in FTP server with username = " + username + ", password = " +   password);         ftpClient.logout();         return;       }        // Here we will use the BINARY mode as the transfer file type,       // ASCII mode is not supportted.       LOGGER.debug("Set type of the file, which is to upload, to BINARY.");       ftpClient.setFileType(FTP.BINARY_FILE_TYPE);        if (isPASV != null && isPASV) {         LOGGER.debug("Use the PASV mode to transfer file.");         ftpClient.enterLocalPassiveMode();       } else {         LOGGER.debug("Use the ACTIVE mode to transfer file.");         ftpClient.enterLocalActiveMode();       }        if (StringUtils.isBlank(workingDirectory)) {         workingDirectory = "/";       }              LOGGER.debug("Change current working directory to " + workingDirectory);       changeWorkingDirectory(ftpClient,workingDirectory);              if (isUpload) { // upload         if (StringUtils.isBlank(serverFileStoredName)) {           serverFileStoredName = fileToUpload.getName();         }         fileIn = new FileInputStream(fileToUpload);         LOGGER.debug("Upload file : " + fileToUpload.getAbsolutePath() + " to FTP server with name : "             + serverFileStoredName);         if (!ftpClient.storeFile(serverFileStoredName, fileIn)) {           LOGGER.error("Fail to upload file, " + ftpClient.getReplyString());         } else {           LOGGER.debug("Success to upload file.");         }       } else { // download         // make sure the file directory exists         File fileStored = new File(localFileStoredPath);         if (!fileStored.getParentFile().exists()) {           fileStored.getParentFile().mkdirs();         }         fileOut = new FileOutputStream(fileStored);         LOGGER.debug("Download file : " + fileNameToDownload + " from FTP server to local : "             + localFileStoredPath);         if (!ftpClient.retrieveFile(fileNameToDownload, fileOut)) {           LOGGER.error("Fail to download file, " + ftpClient.getReplyString());         } else {           LOGGER.debug("Success to download file.");         }       }        ftpClient.noop();        ftpClient.logout();      } finally {       if (ftpClient.isConnected()) {         try {           ftpClient.disconnect();         } catch (IOException f) {         }       }       if (fileIn != null) {         try {           fileIn.close();         } catch (IOException e) {         }       }       if (fileOut != null) {         try {           fileOut.close();         } catch (IOException e) {         }       }     }   }      private static final boolean changeWorkingDirectory(FTPClient ftpClient, String workingDirectory) throws IOException{     if(!ftpClient.changeWorkingDirectory(workingDirectory)){       String [] paths = workingDirectory.split("/");       for(int i=0 ;i<paths.length ;i++){         if(!"".equals(paths[i])){           if(!ftpClient.changeWorkingDirectory(paths[i])){             ftpClient.makeDirectory(paths[i]);             ftpClient.changeWorkingDirectory(paths[i]);           }         }       }     }     return true;   }      public static final void upload(Map<String, Object> serverCfg, String filePathToUpload, String fileStoredPath, String   fileStoredName)       throws SocketException, IOException {     upload(serverCfg, new File(filePathToUpload), fileStoredPath, fileStoredName);   }      public static final void upload(Map<String, Object> serverCfg, File fileToUpload, String fileStoredPath, String   fileStoredName)       throws SocketException, IOException {     if(fileStoredPath!=null && !"".equals(fileStoredPath)){       serverCfg.put(WORKING_DIRECTORY, fileStoredPath);     }     upload(serverCfg, fileToUpload, fileStoredName);   }      public static final void upload(String filePathToUpload, String fileStoredPath)throws SocketException, IOException {     upload(serverCfg, filePathToUpload, fileStoredPath, "");   }      public static final void upload(File fileToUpload, String fileStoredPath)throws SocketException, IOException {     upload(serverCfg, fileToUpload, fileStoredPath, "");   }           public static String values(String key) {     String value = prop.getProperty(key);     if (value != null) {       return value;     } else {       return null;     }   }    } 

ftp.properties

#服務(wù)器地址 SERVER_IP=192.168.1.1  #服務(wù)器端口 SERVER_PORT=21  #帳號(hào)名 USER_NAME=userftp  #密碼 #PASSWORD=passwordftp 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 民乐县| 灵山县| 马龙县| 富平县| 章丘市| 喀喇沁旗| 汉阴县| 潞城市| 光泽县| 安丘市| 镇赉县| 南郑县| 高唐县| 孟州市| 佛教| 岑巩县| 陆良县| 德昌县| 扎鲁特旗| 铜山县| 博兴县| 石首市| 根河市| 分宜县| 施秉县| 陇西县| 灵璧县| 昌乐县| 红桥区| 麦盖提县| 灌南县| 广宗县| 义马市| 宜兴市| 莱州市| 台东市| 苏尼特右旗| 株洲县| 马龙县| 揭西县| 岳阳县|