国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 詳解SpringMVC使用MultipartFile實現文件的上傳

詳解SpringMVC使用MultipartFile實現文件的上傳

2020-07-20 13:11w410589502 Java教程

本篇文章主要介紹了SpringMVC使用MultipartFile實現文件的上傳,本地的文件上傳到資源服務器上,比較好的辦法就是通過ftp上傳。這里是結合SpringMVC+ftp的形式上傳的,有興趣的可以了解一下。

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

springMVC上傳需要幾個關鍵jar包,spring以及關聯包可以自己配置,這里主要說明關鍵的jar包

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

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

配置文件

SpringMVC是用MultipartFile來進行文件上傳的,因此我們先要配置MultipartResolver,用于處理表單中的file

?
1
2
3
4
5
6
7
<!-- 上傳文件解釋器 -->
  <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配置請求的編碼格式,默認為iso-8859-1

maxUploadSize配置文件的最大單位,單位為字節

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

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

頁面配置

在頁面的form中加上enctype="multipart/form-data"

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

表單標簽中設置enctype="multipart/form-data"來確保匿名上載文件的正確編碼。

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

編寫上傳控制類

編寫一個上傳方法,這里沒有返回結果,需要跳轉頁面或者返回其他值可以將void改為String、Map<String,Object>等值,再return返回結果。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
    /**
 * 上傳
 * @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是頁面input的name名
  String basePath = "文件路徑"
  try {
    MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
      if (resolver.isMultipart(request)) {
      String fileStoredPath = "文件夾路徑";
      //隨機生成文件名
      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();
          }
        }
        //復制文件到指定路徑
        FileUtils.copyInputStreamToFile(file.getInputStream(), saveFile);
        //上傳文件到服務器
        FTPClientUtil.upload(saveFile, fileStoredPath);
      }
    }
  } catch (Exception e) {
    e.printStackTrace();
  }
}

FTP客戶端上傳工具

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
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

?
1
2
3
4
5
6
7
8
9
10
11
#服務器地址
SERVER_IP=192.168.1.1
 
#服務器端口
SERVER_PORT=21
 
#帳號名
USER_NAME=userftp
 
#密碼
#PASSWORD=passwordftp

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.csdn.net/w410589502/article/details/53906145

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 黄色av网站在线观看 | 国产免费一区二区三区 | 国产精品久久久久久久久久ktv | 欧美一级欧美三级在线观看 | 红桃视频一区二区三区免费 | 亚洲在线日韩 | 一区三区在线观看 | 欧美大片aaaa在线观看 | 久久精品久久久 | 天天综合久久 | 成人中文网| 91久久| 久久久久久国产精品免费免费狐狸 | 久久久激情视频 | 久久av网站 | 另类国产ts人妖高潮系列视频 | 欧美电影免费观看高清 | 国产一区二区精品 | 亚洲色吧 | 精品视频网 | 免费国产一区 | 成人久久久久久久久 | 欧美日本亚洲 | 中国黄色一级视频 | 国产片av在线永久免费观看 | 久草视频网 | 欧美 日韩 | 亚洲小视频网站 | 久久久久久久国产 | 一级黄色毛片 | 亚洲精品综合 | 欧美精品一区二区视频 | av免费在线观看网站 | 欧美精品在线看 | 国产精品久久一区二区三区 | 色婷婷精品久久二区二区蜜臂av | 久久综合九九 | 狠狠综合 | 一区二区三区视频 | 在线看无码的免费网站 | 午夜欧美|