В этой статье мы описываем, как использовать Spring Boot для загрузки файлов в распределенную файловую систему FASTDFS.
Этот проект будет построен на основе предыдущего проекта.
1. Конфигурация пакета POM
Мы используем последнюю версию Spring Boot 1.5.9, JDK использует 1.8, tomcat8.0.
<Depective> <groupid> org.csource </GroupId> <ArtifactId> FASTDFS-client-java </artifactid> <sersive> 1.27-snapshot </version> </deperency>
Добавлено пакет FastDFS-Client-Java, чтобы вызвать API, связанные с FASTDFS.
2. Файл конфигурации
Добавить файл fdfs_client.conf в каталог ресурсов
connect_timeout = 60network_timeout = 60Charset = utf-8http.tracker_http_port = 8080http.anti_steal_token = nohttp.secret_key = 123456
Файл конфигурации устанавливает время подключения, формат кодирования, адрес Tracker_server и другая информация.
Ссылка для деталей: FastDFS-Client-Java
3. Инкапсулируйте класс инструментов загрузки FASTDFS
Инкапсулируйте FASTDFSFILE, а базовая информация о файле включает имя файла, контент, тип файла, автор и т. Д.
открытый класс FASTDFSFILE {Private String Name; частный байт [] содержание; частная строка ext; частная строка MD5; частная строка автор; // Опустите Getter и SetterИнкапсулируйте класс FASTDFSClient, включая часто используемые методы, такие как загрузка, загрузка и удаление.
Во -первых, прочитайте соответствующую информацию о конфигурации, когда класс загружен и инициализируйте ее.
static {try {String filePath = new ClassPathresource ("fdfs_client.conf"). getFile (). getabsolutePath () ;; Clientglobal.init (filepath); Trackerclient = new Trackerclient (); TrackerServer = trackerclient.getConnection (); StorageServer = trackerclient.getStorestorage (TrackerServer); } catch (Exception e) {logger.error ("fastDfs client init Fail!", e); }}Загрузка файла
public Static String [] upload (fastdfsfile file) {logger.info ("Имя файла:" + file.getName () + "Длина файла:" + file.getContent (). Length); NamevaluePair [] meta_list = new namevaluePair [1]; meta_list [0] = new namevaluepair ("Автор", file.getAuthor ()); long starttime = System.currentTimeMillis (); String [] uploadResults = null; try {storageclient = new Storageclient (TrackerServer, StorageServer); uploadresults = storageclient.upload_file (file.getContent (), file.getext (), meta_list); } catch (ioException e) {logger.error ("IO Exception при загрузке файл:" + file.getName (), e); } catch (Exception e) {logger.Error ("non io Exception при загрузке файла:" + file.getName (), e); } logger.info ("upload_file используется:" + (system.currenttimemillis () - starttime) + "ms"); if (uploadresults == null) {logger.error ("Файл загрузки, код ошибки:" + storageclient.getErrorCode ()); } String GroupName = uploadResults [0]; String remoteFilename = uploadResults [1]; logger.info ("Загрузить файл успешно !!!" + "group_name:" + groupname + ", remotefilename:" + "" + remotefilename); вернуть uploadresults;}Используйте клиент Storageclient, предоставленный FASTDFS для загрузки файлов, и, наконец, верните результат загрузки.
Получите информацию о файле на основе имени GroupName и файла.
public static fileInfo getFile (String GroupName, String remoteFilEname) {try {StorageClient = new StorageClient (TrackerServer, StorageServer); return storageclient.get_file_info (GroupName, remoteFilename); } catch (ioException e) {logger.error ("IO Exception: получить файл из Fast DFS не удался", E); } catch (Exception e) {logger.error ("non io excection: получить файл из Fast DFS не удалось", e); } return null;}Загрузите файл
public static inputStream DownFile (String GroupName, String remoteFilEname) {try {StorageClient = new StorageClient (TrackerServer, Storageserver); byte [] filebyte = storageclient.download_file (groupname, remotefilename); InputStream ins = new BytearRayinputStream (fileByte); вернуть INS; } catch (ioException e) {logger.error ("IO Exception: получить файл из Fast DFS не удался", E); } catch (Exception e) {logger.error ("non io excection: получить файл из Fast DFS не удалось", e); } return null;}Удалить файлы
public static void deletefile (String GroupName, String remoteFilEname) выбрасывает Exception {StorageClient = new StorageClient (TrackerServer, Storageserver); int i = storageclient.delete_file (groupname, remotefilename); logger.info ("Удалить файл успешно !!!" + i);}При использовании FASTDFS просто вызовите соответствующий метод FASTDFSClient.
4. Написать класс управления загрузкой.
Прочитайте информацию о файле из Multiplactfile и загрузите файл в кластер FASTDFS с помощью FASTDFSClient.
public String SaveFile (MultipArtFile MultipArtFile) Throws IOException {String [] fileAbSolutePath = {}; String fileName = multipArtFile.getoriginalFilename (); String ext = filename.substring (filename.lastindexof (".") + 1); byte [] file_buff = null; InputStream inputStream = multiplArtFile.getInputStream (); if (inputStream! = null) {int len1 = inputStream.available (); file_buff = new Byte [len1]; inputstream.read (file_buff); } inputStream.close (); Fastdfsfile file = new fastdfsfile (имя файла, file_buff, ext); try {fileabesolutepath = fastdfsclient.upload (file); // загружать в fastdfs} catch (Exception e) {logger.Error ("exception file ulload!", e); } if (fileabesolutepath == null) {logger.error ("Файл загрузки не удастся, пожалуйста, загрузите еще раз!"); } String path = fastdfsclient.getTrackerurl ()+fileAbsolutePath [0]+"/"+fileAbsolutePath [1]; возвратный путь;}Управление запросом, вызовите вышеуказанный метод saveFile ().
@Postmapping ("/upload") // Новая аннотация Со времен 4.3Public String SingleFileUpload (@RequestParam ("file") файл Multiplicfile, redirectattributes redirectattributes) {if (file.isempty ()) {redirectattributes.addflashattribute (please worile aflect afletributtributes.addflashattribute (please wat uptulibuts. вернуть "перенаправление: uploadstatus"; } try {// Получить файл и сохранить его где -нибудь string path = saveFile (file); redirectattributes.addflashattribute ("Сообщение", "Вы успешно загрузили ' + file.getoriginalfilename () +"' "); redirectattributes.addflashattribute («path», «pail path url '" + path + "'"); } catch (Exception e) {logger.Error ("opload Faile", e); } return "redirect:/uploadstatus";}После того, как загрузка будет успешной, отобразите путь файла на страницу, а визуализации следующие:
Посетите этот URL в своем браузере, и вы можете увидеть, что он успешно отображается через FASTDFS:
Это делается с использованием Spring Boot для интеграции FASTDFS.
Пример кода - GitHub
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.