Если вам нужно загружать файлы на серверах, вы загружаете наши локальные файлы на сервер ресурсов. Лучший способ - загрузить их через FTP. Это загружается в сочетании с SpringMVC+FTP. Нам нужно сначала понять, как настроить SpringMVC, затем настроить FTP и, наконец, загрузить файл в комбинацию с MultiplaartFile.
Загрузка Springmvc требует нескольких пакетов для банок, пружина, и связанные с ними пакеты могут быть настроены сами. Здесь мы в основном объясняем пакеты банков
1: Spring-Web-3.2.9.release.jar (пакет ключей банки Spring, вы можете выбрать версию самостоятельно)
2: Commons-IO-2.2.jar (некоторые пакеты инструментов, используемые для обработки IO в проекте)
Файл конфигурации
Springmvc использует MultipartFile для загрузки файлов, поэтому нам необходимо настроить MultipResolver для обработки файлов в форме
<!-upload file interpreter-> <bean id = "multiartresolver"> <name = "defaultencoding" value = "utf-8" /> <name = "maxuploadSize" value = "10485760" /> <Property name = "maxInmemorysize" value = "4096" /> <property name = "resolvale" /viring " /viring" /viring " /vilue" /vilue " /vilue" /vilue " /vilue" /vilue " /viring" /ressolalailsize ".
Атрибуты подробно объясняются:
По умолчанию настраивает формат кодирования запроса, Default iso-8859-1
Максимальная единица файла конфигурации maxUploadSize, в байтах
MaxInMemorySize Настройка кэша загруженных файлов, в байтах
Свойство Resolvelazily включено для задержки разрешения файлов, чтобы исключения размера файла могли быть пойманы в загрузке
Конфигурация страницы
Добавить ectype = "Multipart/Form-Data" в форму страницы
<form id = "" name = "" method = "post" action = "" ectype = "multipart/form-data">
Установите enctype = "Multipart/Form-Data" в теге формы, чтобы убедиться, что правильное кодирование анонимного загруженного файла.
Это кодирование MIME формы. По умолчанию этот формат кодирования является Application/x-Www-Form-Urlencoded, который не может быть использован для загрузки файлов; Только при использовании Multipart/Form-Data могут быть полностью переданы данные файла, и выполняются следующие операции. Enctype = "Multipart/Form-Data" предназначен для загрузки двоичных данных. Входное значение в форме передается двузначным образом, поэтому запрос не может получить значение.
Написать класс управления загрузкой
Напишите метод загрузки, и здесь нет результата. Если вам нужно перейти на страницу или вернуть другие значения, вы можете изменить void на строку, карту <строка, объект> и другие значения, а затем вернуться, чтобы вернуть результат.
/** * upload * @param запрос * @return */@responsebody @requestmapping (value = "/upload", method = {requestmethod.get, requestmethod.post}) public void upload (httpservlectrequest) {multiparthtpserveltrequest multipequest = (mulfitarThrThttServ) MultipartFile file = multipRtequest.getFile ("file"); // Файл - это имя имени входной строки страницы basePath = "file path" try {multipResolver resolver = new CommonsMultiparTresolver (request.getSession (). GetServletContext ()); if (Resolver.ismultipart (request)) {string fileStoredPath = "poater Path"; // случайное сгенерированное имя файла string randomName = stringUtil.getRandomFilEname (); String uploadfilename = file.getoriginalfilename (); if (stringutils.isnotblank (uploadfilename)) {// перехватывать имя формата файла string suffix = uploadfilename.substring (uploadfilename.indexof (".")); // Собрание имени файла string newFilename = randomName + суффикс; String SavePath = basePath + "/" + newFilename; File savefile = new File (savePath); File parentfile = saveFile.getParentFile (); if (savefile.exists ()) {savefile.delete (); } else {if (! parentfile.exists ()) {parentfile.mkdirs (); }} // Скопируйте файл в указанный Path FileUtils.copyInputStreamToFile (file.getInputStream (), saveFile); // загружать файл на сервер ftpclientutil.upload (savefile, filestoredpath); }}} catch (Exception e) {e.printstackTrace (); }} FTP -клиент инструмент загрузки
пакет com.yuananding.common.util; Импорт java.io.file; импортировать java.io.fileinputstream; Импорт java.io.fileOutputStream; импортировать java.io.ioexception; импортировать java.io.inputstream; импортировать java.io.outputstream; Импорт java.net.socketException; импортировать java.util.hashmap; импортировать java.util.map; импортировать java.util.properties; импорт org.apache.commons.lang.stringutils; Импорт org.apache.commons.net.ftp.ftp; Import org.apache.commons.net.ftp.ftpclient; Импорт org.apache.commons.net.ftp.ftpreply; Импорт org.slf4j.logger; Импорт org.slf4j.loggerfactory; / *** FTP клиентские инструменты*/ public class ftpclientutil {/ *** log*/ private static final logger logger = loggerfactory.getlogger (ftpclientutil.class); / ** * Конфигурация сервера FTP-Ключ-IP, значение-тип строки */ public Static Final String Server_ip = "server_ip"; / ** * Конфигурация сервера FTP-Ключ-порт, значение-тип целого числа */ public Static Final String Server_port = "Server_port"; / ** * Конфигурация сервера FTP-анонимный вход в систему, значение-это тип Boolean */ public Static Final String is_anonymous = "is_anonymous"; / ** * Имя пользователя анонимного журнала */ public static final String anonymous_user_name = "anonymous"; / ** * Пароль анонимного входа в систему */ public static final String anonymous_password = ""; / ** * Конфигурация сервера FTP-log В имени пользователя значение-тип строки */ public static final String user_name = "user_name"; / ** * Конфигурация FTP-сервера-log В пароле значение-тип строки */ public State Final String Password = "password"; / ** * Конфигурация FTP-сервера-клавиша PASV, значение-это тип Boolean */ public Static Final String is_pasv = "is_pasv"; /** * Конфигурация сервера FTP-Ключ каталога работающего, значение-это тип строки во время входа в систему, текущий каталог * является домашним каталогом пользователя, WorkingDirectory должен быть установлен на основе его. Кроме того, WorkingDirectory должен * существовать, он не может быть создан автоматически. Если нет, файл будет загружен в домашний каталог пользователя. Если * не назначено, «/» используется. */ public static final String worky_directory = "worky_directory"; Public Static Map <String, Object> ServerCfg = new HashMap <String, Object> (); Статические свойства опора; static {logger.info ("Начните загружать файл ftp.properties!"); prop = новые свойства (); 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 ("пароль")); Logger.info (string.valueof (servercfg)); } /*** Загрузите файл на FTP -сервер. * * @param servercfg: конфигурация FTP -сервера * @param filepathtoupload: Путь файла для загрузки * @param filestoredname: имя, чтобы дать удаленный хранимый файл, null, "" и другое пустое слово будет заменено * на имя файла для загрузки * @throws ioxception * @throws socketExcept FilePathtoupload, String fileStoredName) Throws SocketException, ioException {upload (serverCfg, новый файл (filePathtoupload), filestoredName); } /*** Загрузите файл на FTP -сервер. * * @param servercfg: конфигурация FTP -сервера * @param filetoupload: файл для загрузки * @param filestoredname: имя, чтобы дать удаленный хранимый файл, null, "" и другое пустое слово будет заменено * на имя файла для загрузки * @Throws ioExcept FileStoredName) Throws SocketException, ioException {if (! fileToupload.exists ()) {Throw new allogalArgumentException («Файл для загрузки не существует:" + fileToupload.getAbSolutePath ()); } if (! fileToupload.isfile ()) {Throw New allogalArgumentException ("файл для загрузки не является файлом:" + fileToupload.getAbSolutePath ()); } if (stringUtils.isblank ((string) servercfg.get (server_ip))) {throw new allogalargumentException ("server_ip должен содержаться в конфигурации FTP -сервера."); } TransperFile (true, ServerCfg, FileToupload, FilestoredName, NULL, NULL); } / ** * Загрузите файл с FTP -сервера * * @param servercfg: конфигурация FTP -сервера * @param filenametodownload: имя файла для загрузки * @param filestoredpath: сохраненный путь загруженного файла в локальном * @throws socketexception * @throws ioexcept FileStoredPath) бросает SocketException, ioException {if (stringUtils.isblank (filenametodownload)) {throw new allogalargumentException («Имя файла, которое нужно загрузить, не может быть пустым.»); } if (stringUtils.isblank (filestoredPath)) {бросить new allogalargumentException («Хранитый путь загруженного файла в локальном не может быть пустым.»); } if (stringUtils.isblank ((string) servercfg.get (server_ip))) {throw new allogalargumentException ("server_ip должен содержаться в конфигурации FTP -сервера."); } TransferFile (false, ServerCfg, NULL, NULL, FILENAMETODOWNLOAD, FILESTOREDPATH); } private static final void TransferFile (Boolean Isupload, Map <String, Object> ServerCfg, File filePulAd, String ServerFilestoredName, String filenAmetOdownload, String localfilestoredPath) Throws SocketException, ioException {String host = 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 (worky_directory); Ftpclient ftpclient = new ftpclient (); Inputstream filein = null; OutputStream fileout = null; try {if (port == null) {logger.debug ("Подключиться к FTP -серверу на" + host + ":" + ftp.default_port); ftpclient.connect (host); } else {logger.debug ("Подключиться к FTP -серверу на" + host + ":" + port); ftpclient.connect (хост, порт); } int response = ftpclient.getReplyCode (); if (! ftpreply.ispositivecoplusion (reply)) {logger.error ("FTP -сервер отказывается от соединения"); возвращаться; } if (isAnonymous! = null && isAnonymous) {userName = anonymous_user_name; пароль = anonymous_password; } Logger.debug ("Войдите в FTP -сервер с username =" + username + ", password =" + password); if (! ftpclient.login (username, password)) {logger.error ("Не удается войти в систему FTP с помощью username =" + username + ", password =" + password); ftpclient.logout (); возвращаться; } // Здесь мы будем использовать двоичный режим в качестве типа передачи файла, // режим ASCII не поддерживается. Logger.debug ("Установите тип файла, который должен загрузить, в Binary."); ftpclient.setFileType (ftp.binary_file_type); if (ispasv! = null && ispasv) {logger.debug («Используйте режим PASV для передачи файла.»); ftpclient.enterlocalpassivemode (); } else {logger.debug («Используйте активный режим для передачи файла.»); ftpclient.enterlocalactivemode (); } if (stringUtils.isblank (workingDirectory)) {workingDirectory = "/"; } Logger.debug («Изменить текущий рабочий каталог на» + workingDirectory); changeWorkingDirectory (ftpClient, WorkingDirectory); if (isupload) {// upload if (stringUtils.isblank (serverfilestoredname)) {serverfilestoredname = filetoupload.getName (); } filein = new FileInputStream (fileToupload); Logger.debug ("upload file:" + filetoupload.getabsolutePath () + "для FTP -сервера с именем:" + serverfilestoredname); if (! ftpclient.storefile (serverfilestoredname, filein)) {logger.error ("не загружать файл" + ftpclient.getReplyString ()); } else {logger.debug ("успех для загрузки файла"); }} else {// Скачать // Убедитесь, что файл существует файл FileStored = новый файл (localfilestoredPath); if (! filestored.getParentFile (). существует ()) {fileStored.getParentFile (). mkdirs (); } fileout = new FileOutputStream (FileStored); Logger.debug ("Загрузить файл:" + filenametodownload + "от FTP -сервера до local:" + localfilestoredpath); if (! ftpclient.retriefilefile (filenametodownload, fileout)) {logger.error ("не загружать файл" + ftpclient.getReplyString ()); } else {logger.debug ("успех для загрузки файла"); }} ftpclient.noop (); ftpclient.logout (); } наконец {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) {}}} частная статическая конечная логическая подключение к изменению workingDirectory (ftpClient ftpClient, String WorkingDirectory) Throws IoException {if (! ftpclient.changeWorkingDirectory (workingDirectory)) {string [] paths = workingdirectory.split ("/"); "); for (int i = 0; i <paths.length; i ++) {if (! ". ftpclient.changeWorkingDirectory (Paths [i]); }}} вернуть true; } public static final void upload (map <string, object> serverCfg, String filePathtoupload, String fileStoredPath, String filestoredName) Throws SocketException, ioException {upload (ServerCfg, новый файл (filePathToupload), filestoredPath, filestoredName); } public static final void upload (map <string, object> servercfg, файл filetoupload, string filestoredpath, string filestoredname) throws socketException, ioException {if (fileStoredPath! = null &&! "". } upload (serverCfg, fileToupload, filestoredName); } public static final void upload (String filePathtoupload, String fileStoredPath) бросает SocketException, ioException {upload (serverCfg, filePathtoupload, filestoredPath, ""); } public static final void upload (file filetoupload, string filestoredpath) бросает 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
#Server Адрес Server_ip = 192.168.1.1 #server Port Server_port = 21 #Account name user_name = userftp #password #password = passwordptp
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.