自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

SpringBoot與Tika整合,實(shí)現(xiàn)數(shù)字資產(chǎn)管理系統(tǒng)

開發(fā) 前端
Tika 在設(shè)計上考慮了性能優(yōu)化,能夠在較短時間內(nèi)處理大量文件。這對于需要高效管理大量文件的企業(yè)級應(yīng)用尤為重要。

隨著企業(yè)數(shù)字化轉(zhuǎn)型的加速,傳統(tǒng)的文件管理系統(tǒng)往往難以應(yīng)對大量文件的高效存儲、檢索和安全保護(hù)。為了提高工作效率和數(shù)據(jù)安全性,“數(shù)字資產(chǎn)管理系統(tǒng)”應(yīng)運(yùn)而生。

我們?yōu)槭裁催x擇Apache Tika?

高性能

Tika 在設(shè)計上考慮了性能優(yōu)化,能夠在較短時間內(nèi)處理大量文件。這對于需要高效管理大量文件的企業(yè)級應(yīng)用尤為重要。

多功能性

Apache Tika 是一個強(qiáng)大的內(nèi)容分析工具庫,能夠檢測和提取各種文件類型的元數(shù)據(jù)和結(jié)構(gòu)化內(nèi)容。它支持超過100種不同的文件格式,包括常見的文檔格式(如PDF、Microsoft Office文檔)、多媒體格式(如MP3、JPEG)以及其他多種格式。

自動檢測文件類型

Tika 能夠自動檢測文件的 MIME 類型,并根據(jù)文件類型使用合適的解析器來提取元數(shù)據(jù)。這種自動化的檢測機(jī)制減少了手動配置的復(fù)雜性,提高了系統(tǒng)的靈活性和適應(yīng)性。

豐富的元數(shù)據(jù)提取能力

Tika 不僅提取基本的文件信息(如文件名、大?。?,還能提取復(fù)雜的元數(shù)據(jù)字段,如文檔的作者、標(biāo)題、關(guān)鍵詞、創(chuàng)建日期等。這對于需要全面了解文件內(nèi)容的應(yīng)用場景非常有用。

跨平臺兼容性

由于 Tika 是純 Java 編寫的,因此可以在任何支持 Java 的平臺上運(yùn)行。這確保了我們的系統(tǒng)具有良好的跨平臺兼容性,降低了部署和維護(hù)的成本。

應(yīng)用場景

數(shù)字資產(chǎn)管理:

  • 管理大量數(shù)字資產(chǎn)(如圖像、視頻、音頻、文檔),自動提取元數(shù)據(jù)和關(guān)鍵內(nèi)容。
  • 為每個資產(chǎn)生成描述性標(biāo)簽,方便分類和檢索。

知識管理平臺:

  • 構(gòu)建內(nèi)部知識庫,自動整理和展示組織的知識資產(chǎn)。
  • 提供協(xié)作工具,讓員工可以輕松地共享和查找相關(guān)信息。

教育和培訓(xùn)材料處理:

  • 處理大量的教學(xué)資料,提取關(guān)鍵知識點(diǎn)。
  • 自動生成學(xué)習(xí)路徑和個人化的學(xué)習(xí)建議。

社交媒體內(nèi)容分析:

  • 分析用戶上傳的內(nèi)容,提取文本、圖片和其他媒體信息。
  • 進(jìn)行情感分析、主題識別等高級處理。

信息檢索系統(tǒng):

  • 提供高級的文檔檢索功能,幫助用戶快速找到所需的信息。
  • 支持復(fù)雜的查詢條件,如按關(guān)鍵詞、日期范圍等過濾結(jié)果。

法律文檔管理:

  • 自動化合同、協(xié)議等法律文件的管理和審查。
  • 提取條款和條件,進(jìn)行版本控制和變更追蹤。

新聞出版業(yè):

  • 從報紙、雜志和其他出版物中提取內(nèi)容,用于數(shù)字化存檔。
  • 自動生成摘要和關(guān)鍵字,便于讀者瀏覽和查找。

哪些公司使用了Apache Tika?

  • 維基百科使用 Apache Tika 來處理和索引各種文件類型的上傳內(nèi)容,包括圖像、PDF 和其他多媒體文件。這有助于提高維基百科的搜索性能和用戶體驗。
  • IBM Watson Discovery 使用 Apache Tika 來處理和分析各種文件類型的文本數(shù)據(jù),幫助企業(yè)從中提取有價值的信息并進(jìn)行智能搜索。
  • Adobe AEM 使用 Apache Tika 來提取和管理數(shù)字資產(chǎn)的元數(shù)據(jù)。這有助于客戶更好地組織和交付他們的數(shù)字內(nèi)容。
  • Atlassian 的 JIRA 使用 Apache Tika 來處理附件的元數(shù)據(jù)提取。這有助于用戶更好地組織和搜索項目相關(guān)的文件和文檔。
  • LinkedIn 使用 Apache Tika 來處理和索引員工上傳的文檔和其他內(nèi)容。Tika 的多功能性和對多種文件格式的支持幫助 LinkedIn 提供更全面的內(nèi)容搜索功能。
  • Alfresco 是一個企業(yè)級的內(nèi)容管理平臺,它使用 Apache Tika 來提取文件的元數(shù)據(jù)和內(nèi)容。這使得 Alfresco 用戶能夠輕松地管理和搜索存儲在系統(tǒng)中的各種文件類型。
  • Drupal 是一個流行的開源內(nèi)容管理系統(tǒng) (CMS),它使用 Apache Tika 來增強(qiáng)其對文件和媒體內(nèi)容的處理能力。通過集成 Tika,Drupal 用戶可以更容易地管理和搜索上傳的文件。
  • Confluence 是 Atlassian 的另一款流行產(chǎn)品,用于團(tuán)隊協(xié)作和知識共享。Confluence 集成了 Apache Tika 來處理和索引用戶上傳的文件,從而提供更好的搜索體驗。
  • Liferay 是一個企業(yè)級門戶平臺,它使用 Apache Tika 來處理和索引各種文件類型的元數(shù)據(jù),以便用戶提供更好的內(nèi)容管理和搜索體驗。

代碼實(shí)操

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/><!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>digital-asset-manager</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>digital-asset-manager</name>
    <description>Digital Asset Manager with Spring Boot and Apache Tika</description>
    <properties>
        <java.version>11</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-core</artifactId>
            <version>2.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tika</groupId>
            <artifactId>tika-parsers-standard-package</artifactId>
            <version>2.4.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.properties

server.port=8080
spring.datasource.url=jdbc:mysql://localhost:3306/digital_asset_manager?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.jpa.hibernate.ddl-auto=update 
file.storage.location=/tmp/files # 文件存儲路徑,我只是為了簡單展示,如果是生產(chǎn)環(huán)境,就要存儲云。

Controller

package com.example.digitalassetmanager.controller;

import com.example.digitalassetmanager.model.FileMetadata;
import com.example.digitalassetmanager.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;

/**
 * 文件控制器,處理文件上傳、獲取和刪除操作。
 */
@RestController
@RequestMapping("/files")
publicclass FileController {

    @Autowired
    private FileService fileService;

    /**
     * 處理文件上傳請求。
     *
     * @param file 上傳的文件
     * @return 包含文件元數(shù)據(jù)的響應(yīng)實(shí)體
     */
    @PostMapping("/upload")
    public ResponseEntity<FileMetadata> uploadFile(@RequestParam("file") MultipartFile file) {
        try {
            FileMetadata metadata = fileService.uploadAndExtractMetadata(file);
            return ResponseEntity.ok(metadata);
        } catch (Exception e) {
            return ResponseEntity.badRequest().body(new FileMetadata());
        }
    }

    /**
     * 獲取所有文件的元數(shù)據(jù)。
     *
     * @return 包含所有文件元數(shù)據(jù)的響應(yīng)實(shí)體
     */
    @GetMapping("/")
    public ResponseEntity<List<FileMetadata>> getAllFiles() {
        List<FileMetadata> files = fileService.getAllFiles();
        return ResponseEntity.ok(files);
    }

    /**
     * 根據(jù)ID獲取特定文件的元數(shù)據(jù)。
     *
     * @param id 文件ID
     * @return 包含文件元數(shù)據(jù)的響應(yīng)實(shí)體
     */
    @GetMapping("/{id}")
    public ResponseEntity<FileMetadata> getFileById(@PathVariable Long id) {
        FileMetadata file = fileService.getFileById(id);
        if (file != null) {
            return ResponseEntity.ok(file);
        } else {
            return ResponseEntity.notFound().build();
        }
    }

    /**
     * 根據(jù)ID刪除特定文件及其元數(shù)據(jù)。
     *
     * @param id 文件ID
     * @return 刪除結(jié)果的響應(yīng)實(shí)體
     */
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteFile(@PathVariable Long id) {
        boolean deleted = fileService.deleteFile(id);
        if (deleted) {
            return ResponseEntity.noContent().build();
        } else {
            return ResponseEntity.notFound().build();
        }
    }
}

文件元數(shù)據(jù)實(shí)體類

package com.example.digitalassetmanager.model;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

/**
 * 文件元數(shù)據(jù)實(shí)體類,用于存儲文件的詳細(xì)信息。
 */
@Entity
publicclass FileMetadata {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id; // 文件ID,自增主鍵
    private String fileName; // 文件名
    private String contentType; // 內(nèi)容類型
    privatelong size; // 文件大小
    private String mimeType; // MIME類型
    private String author; // 作者
    private String title; // 標(biāo)題

    // Getters and Setters
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public String getContentType() {
        return contentType;
    }

    public void setContentType(String contentType) {
        this.contentType = contentType;
    }

    public long getSize() {
        return size;
    }

    public void setSize(long size) {
        this.size = size;
    }

    public String getMimeType() {
        return mimeType;
    }

    public void setMimeType(String mimeType) {
        this.mimeType = mimeType;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

Repository

package com.example.digitalassetmanager.repository;

import com.example.digitalassetmanager.model.FileMetadata;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;

/**
 * 文件元數(shù)據(jù)倉庫接口,用于數(shù)據(jù)庫操作。
 */
public interface FileMetadataRepository extends JpaRepository<FileMetadata, Long> {
    List<FileMetadata> findAll(); // 獲取所有文件元數(shù)據(jù)
}

Service

package com.example.digitalassetmanager.service;

import com.example.digitalassetmanager.model.FileMetadata;
import com.example.digitalassetmanager.repository.FileMetadataRepository;
import org.apache.tika.Tika;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.sax.BodyContentHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Optional;

/**
 * 文件服務(wù)類,處理文件上傳、提取元數(shù)據(jù)、保存和刪除操作。
 */
@Service
publicclass FileService {

    @Value("${file.storage.location}")
    private String storageLocation; // 文件存儲路徑

    @Autowired
    private FileMetadataRepository fileMetadataRepository; // 文件元數(shù)據(jù)倉庫

    /**
     * 上傳文件并提取其元數(shù)據(jù)。
     *
     * @param file 上傳的文件
     * @return 提取的文件元數(shù)據(jù)
     * @throws Exception 如果發(fā)生異常
     */
    public FileMetadata uploadAndExtractMetadata(MultipartFile file) throws Exception {
        // 創(chuàng)建存儲目錄(如果不存在)
        Path directoryPath = Paths.get(storageLocation);
        Files.createDirectories(directoryPath);

        // 構(gòu)建文件存儲路徑
        String filePath = storageLocation + "/" + file.getOriginalFilename();
        InputStream inputStream = file.getInputStream();

        // 使用Tika提取文件元數(shù)據(jù)
        BodyContentHandler handler = new BodyContentHandler(-1);
        Metadata metadata = new Metadata();
        AutoDetectParser parser = new AutoDetectParser();

        parser.parse(inputStream, handler, metadata);

        // 創(chuàng)建文件元數(shù)據(jù)對象
        FileMetadata fileMetadata = new FileMetadata();
        fileMetadata.setFileName(file.getOriginalFilename());
        fileMetadata.setContentType(file.getContentType());
        fileMetadata.setSize(file.getSize());
        fileMetadata.setMimeType(metadata.get("Content-Type"));
        fileMetadata.setAuthor(metadata.get("Author"));
        fileMetadata.setTitle(metadata.get("title"));

        // 將文件保存到指定路徑
        FileOutputStream outputStream = new FileOutputStream(filePath);
        outputStream.write(file.getBytes());
        outputStream.close();

        // 保存文件元數(shù)據(jù)到數(shù)據(jù)庫
        return fileMetadataRepository.save(fileMetadata);
    }

    /**
     * 獲取所有文件的元數(shù)據(jù)。
     *
     * @return 所有文件的元數(shù)據(jù)列表
     */
    public List<FileMetadata> getAllFiles() {
        return fileMetadataRepository.findAll();
    }

    /**
     * 根據(jù)ID獲取特定文件的元數(shù)據(jù)。
     *
     * @param id 文件ID
     * @return 特定文件的元數(shù)據(jù)
     */
    public FileMetadata getFileById(Long id) {
        Optional<FileMetadata> optionalFile = fileMetadataRepository.findById(id);
        return optionalFile.orElse(null);
    }

    /**
     * 根據(jù)ID刪除特定文件及其元數(shù)據(jù)。
     *
     * @param id 文件ID
     * @return 是否成功刪除
     */
    public boolean deleteFile(Long id) {
        Optional<FileMetadata> optionalFile = fileMetadataRepository.findById(id);
        if (optionalFile.isPresent()) {
            FileMetadata fileMetadata = optionalFile.get();
            String filePath = storageLocation + "/" + fileMetadata.getFileName();
            File file = new File(filePath);
            if (file.exists()) {
                file.delete();
            }
            fileMetadataRepository.deleteById(id);
            returntrue;
        }
        returnfalse;
    }
}

Application.java

package com.example.digitalassetmanager;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DigitalAssetManagerApplication {

    public static void main(String[] args) {
        SpringApplication.run(DigitalAssetManagerApplication.class, args);
    }
}


責(zé)任編輯:武曉燕 來源: Java知識日歷
相關(guān)推薦

2025-04-23 08:50:00

SpringBootCurator分布式鎖

2025-04-08 08:50:37

SpringCamel系統(tǒng)

2025-02-28 08:40:28

ZooKeeperSpringBoot計費(fèi)系統(tǒng)

2025-03-03 07:30:00

SpringBootJGraphT網(wǎng)絡(luò)建模

2025-03-11 09:28:34

2025-02-26 09:24:54

SpringMySQLMyBatis

2025-04-21 03:00:00

2025-03-26 01:55:00

Spring協(xié)議物聯(lián)網(wǎng)

2025-03-19 08:36:55

2020-04-30 10:09:23

數(shù)字資產(chǎn)管理DAM數(shù)字資產(chǎn)

2025-03-20 08:57:54

Spring日志存儲系統(tǒng)

2025-04-25 08:34:52

2018-11-26 22:17:00

IT資產(chǎn)ForceView I

2018-04-28 09:40:14

數(shù)字化

2020-09-21 16:29:22

區(qū)塊鏈資產(chǎn)數(shù)字化

2025-04-01 08:38:41

2025-03-21 08:55:36

SpringOpenFeignAPI

2025-04-14 01:00:00

Calcite電商系統(tǒng)MySQL

2025-04-18 08:54:30

2015-07-15 11:44:18

ITIT資產(chǎn)管理系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號