Spring Boot + Apache Tika 從文件或文件流中提取文本內容

應用效果:

1、安裝 Apache Tika 依賴

pom.xml

    <!-- Apache Tika 從文件中提取結構化文本和元數據 --><dependency><groupId>org.apache.tika</groupId><artifactId>tika-core</artifactId><version>2.9.2</version></dependency><dependency><groupId>org.apache.tika</groupId><artifactId>tika-parsers-standard-package</artifactId><version>2.9.2</version></dependency>

2、配置

新建配置文件:src/main/resources/tika-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<properties><encodingDetectors><encodingDetector class="org.apache.tika.parser.html.HtmlEncodingDetector"><params><param name="markLimit" type="int">64000</param></params></encodingDetector><encodingDetector class="org.apache.tika.parser.txt.UniversalEncodingDetector"><params><param name="markLimit" type="int">64001</param></params></encodingDetector><encodingDetector class="org.apache.tika.parser.txt.Icu4jEncodingDetector"><params><param name="markLimit" type="int">64002</param></params></encodingDetector></encodingDetectors>
</properties>

新建配置類:src/main/java/com/weiyu/config/TikaConfiguration.java

package com.weiyu.config;import org.apache.tika.Tika;
import org.apache.tika.config.TikaConfig;
import org.apache.tika.detect.Detector;
import org.apache.tika.exception.TikaException;
import org.apache.tika.parser.AutoDetectParser;
import org.apache.tika.parser.Parser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.xml.sax.SAXException;import java.io.IOException;
import java.io.InputStream;
/*** Tika 配置*/
@Configuration
public class TikaConfiguration {@Autowiredprivate ResourceLoader resourceLoader;@Beanpublic Tika tika() throws IOException, TikaException, SAXException {Resource resource = resourceLoader.getResource("classpath:tika-config.xml");InputStream inputStream = resource.getInputStream();TikaConfig config = new TikaConfig(inputStream);Detector detector = config.getDetector();Parser parser = new AutoDetectParser(config);return new Tika(detector, parser);}
}

擴展原有文件工具類(增加提取文本內容的方法) 或 新建文件服務類

工具類:src/main/java/com/weiyu/utils/FileUtils.java

package com.weiyu.utils;import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;import java.io.File;
import java.io.IOException;
import java.io.InputStream;/*** 文件工具*/
public class FileUtils {private static final Tika tika = new Tika();/*** 獲取路徑分隔符* <p>如 windows:D:\\MyCode\\file\\example.txt,返回 \\; example.txt,返回 \u0000(空字符)* <p>如 windows:D:/MyCode/file/example.txt,返回 /; example.txt,返回 \u0000(空字符)* <p>如 Linux:/MyCode/file/example.txt,返回 /; example.txt,返回 \u0000(空字符)* @param filePathName 文件路徑名稱 或 文件名稱* @return 分隔符,如 /、\、\u0000(空字符)*/public static int getPathSplitChar(String filePathName) {if (filePathName == null || filePathName.isEmpty()) return '\u0000';int splitChar;// Linux 目錄,以 / 開頭if (filePathName.charAt(0) == '/') {splitChar = '/';}// windows 目錄else {// windows 目錄路徑使用正斜杠(/)作為路徑分隔符if (filePathName.contains("/")) {splitChar = '/';}// windows 目錄路徑使用反斜杠(\)作為路徑分隔符else if (filePathName.contains("\\")){splitChar = '\\';} else {splitChar = '\u0000';}}return splitChar;}/*** 獲取路徑分隔字符串* <p>如 windows:D:\\MyCode\\file\\example.txt,返回 \\; example.txt,返回 \u0000(空字符)* <p>如 windows:D:/MyCode/file/example.txt,返回 /; example.txt,返回 \u0000(空字符)* <p>如 Linux:/MyCode/file/example.txt,返回 /; example.txt,返回 \u0000(空字符)* @param filePathName 文件路徑名稱 或 文件名稱* @return 分隔字符串,如 /、\、\u0000(空字符)*/public static String getPathSplitString(String filePathName) {int splitChar = getPathSplitChar(filePathName);switch (splitChar) {case 47 -> {return "/";}case 92 -> {return "\\";}default -> {return "";}}}/*** 獲取文件名* <p>如 windows:D:\\MyCode\\file\\example.txt,返回 example.txt; example.txt,返回 example.txt* <p>如 windows:D:/MyCode/file/example.txt,返回 example.txt; example.txt,返回 example.txt* <p>如 Linux:/MyCode/file/example.txt,返回 example.txt; example.txt,返回 example.txt* @param filePathName 文件路徑名稱 或 文件名稱* @return 文件名(無路徑、有后綴),如:example.txt*/public static String getFileName(String filePathName) {// 獲取路徑分隔符int ch = getPathSplitChar(filePathName);// 查找最后一個 ch 的位置int lastDotIndex = filePathName.lastIndexOf(ch);// 如果沒有 ch,直接返回原文件名if (lastDotIndex == -1) {return filePathName;}return filePathName.substring(lastDotIndex + 1);}/*** 移除文件名后綴* <p>如 windows:D:\\MyCode\\file\\example.txt,返回 D:\\MyCode\\file\\example; example.txt,返回 example* <p>如 windows:D:/MyCode/file/example.txt,返回 D:/MyCode/file/example; example.txt,返回 example* <p>如 Linux:/MyCode/file/example.txt,返回 /MyCode/file/example; example.txt,返回 example* @param filePathName 文件路徑名稱 或 文件名稱* @return 文件名(有路徑、無后綴)*/public static String getFileNameContainPathWithoutExtension(String filePathName) {// 查找最后一個 . 的位置int lastDotIndex = filePathName.lastIndexOf('.');// 如果沒有后綴,直接返回原文件名if (lastDotIndex == -1) {return filePathName;}return filePathName.substring(0, lastDotIndex);}/*** 移除文件名路徑和后綴* <p>如 windows:D:\\MyCode\\file\\example.txt 或 example.txt,返回 example* <p>如 windows:D:/MyCode/file/example.txt 或 example.txt,返回 example* <p>如 Linux:/MyCode/file/example.txt 或 example.txt,返回 example* @param filePathName 文件路徑名稱 或 文件名稱* @return 文件名(無路徑、無后綴),如:example*/public static String getFileNameWithoutPathAndExtension(String filePathName) {// 獲取路徑分隔符int ch = getPathSplitChar(filePathName);// 查找最后一個 ch 的位置int lastDotIndex = filePathName.lastIndexOf(ch);// 如果沒有ch,直接返回原文件名if (lastDotIndex != -1) {filePathName = filePathName.substring(lastDotIndex + 1);}// 查找最后一個 . 的位置lastDotIndex = filePathName.lastIndexOf('.');filePathName = filePathName.substring(0, lastDotIndex);return filePathName;}/*** 獲取文件名的擴展名(后綴)* <p>如 windows:D:\\MyCode\\file\\example.txt 或 example.txt,返回 txt* <p>如 windows:D:/MyCode/file/example.txt 或 example.txt,返回 txt* <p>如 Linux:/MyCode/file/example.txt 或 example.txt,返回 txt* @param filePathName 文件路徑名稱 或 文件名稱* @return 擴展名(后綴),不帶.(如:txt)*/public static String getExtension(String filePathName) {// 處理 null 異常if (filePathName == null) return null;// 獲取文件名中最右邊的.int index = filePathName.lastIndexOf(".");// 沒有.if (index == -1) return "";// 獲取文件名的擴展名(后綴)return filePathName.substring(index + 1);}/*** 是否目錄* <p>如 windows:D:\\MyCode\\file\\example.txt,返回 true; example.txt,返回 false* <p>如 windows:D:/MyCode/file/example.txt,返回 true; example.txt,返回 false* <p>如 Linux:/MyCode/file/example.txt,返回 true; example.txt,返回 false* @param filePathName 文件路徑名稱 或 文件名稱* @return true,包含文件路徑;false,不包含文件路徑*/public static Boolean hasDirectory(String filePathName) {// 獲取路徑分隔符int ch = getPathSplitChar(filePathName);// 查找最后一個 ch 的位置int lastDotIndex = filePathName.lastIndexOf(ch);// 如果沒有 ch,不包含文件路徑return lastDotIndex != -1;}/*** 安全目錄,windows目錄以 \ 或 / 結尾,linux目錄以 / 結尾* @param directoryPath 目錄路徑* @return 返回安全目錄,如: 或 D:/MyCode/file/QualityFile/ 或 /MyCode/file/QualityFile/ 或 D:\\MyCode\\file\\QualityFile\\*/public static String safeDirectory(String directoryPath) {// 獲取目錄路徑最后一位字符String lastChar = directoryPath.substring(directoryPath.length() - 1);// 目錄路徑最后沒有目錄分割符 \ 或 /(windows) 或 /(linux)if (!lastChar.equals("\\") && !lastChar.equals("/")) {// linux 目錄路徑以 / 開頭if (directoryPath.charAt(0) == '/') {directoryPath = directoryPath + "/";}// windows 目錄路徑else {// windows 目錄路徑使用正斜杠(/)作為路徑分隔符if (directoryPath.contains("/")) {directoryPath = directoryPath + "/";}// windows 目錄路徑使用反斜杠(\)作為路徑分隔符else {directoryPath = directoryPath + "\\";}}}return  directoryPath;}/*** 拼接目錄路徑* @param mainDirectoryPath 主目錄路徑*                          如 windows:D:/MyCode/file 或 D:\\MyCode\\file,Linux:/MyCode/file*                          如 windows:D:/MyCode/file/ 或 D:\\MyCode\\file\\,Linux:/MyCode/file/* @param subDirectoryPathAndFileName 子目錄路徑 或 文件名 或 子目錄路徑及文件名*                                    如 windows:QualityFile/ 或  QualityFile\\,Linux:QualityFile/*                                    如 windows:QualityFile/example.txt 或 QualityFile\\example.txt,Linux:QualityFile/example.txt*                                    如 windows:/example.txt 或 \\example.txt,Linux:/example.txt* @return 目錄路徑* 如 windows:D:/MyCode/file/QualityFile/ 或 D:\\MyCode\\file\\QualityFile\\,Linux:/MyCode/file/QualityFile/* 如 windows:D:/MyCode/file/QualityFile/example.txt 或 D:\\MyCode\\file\\QualityFile\\example.txt,Linux:/MyCode/file/QualityFile/example.txt* 如 windows:D:/MyCode/file/example.txt 或 D:\\MyCode\\file\\example.txt,Linux:/MyCode/file/example.txt*/public static String joinDirectoryPath(String mainDirectoryPath, String subDirectoryPathAndFileName) {String filePathName;// 安全檢查主目錄路徑,Linux:以 / 開頭,windows:第二位字符是 :if (!isMainDirectoryPath(mainDirectoryPath)) {throw new RuntimeException("非法目錄!");}filePathName = mainDirectoryPath;// 獲取路徑分隔符 / 或 \String pathSplitString = FileUtils.getPathSplitString(filePathName);// 確保最后是路徑分隔符 / 或 \if (!filePathName.endsWith(pathSplitString)) {filePathName = filePathName + pathSplitString;}// 拼接子目錄路徑 或 文件名 或 子目錄路徑及文件名if (subDirectoryPathAndFileName != null && !subDirectoryPathAndFileName.isEmpty()) {// 拼接子目錄路徑 或 文件名 或 子目錄路徑及文件名 以 路徑分隔符 / 或 \ 開頭if (subDirectoryPathAndFileName.startsWith(pathSplitString)) {// 先刪除子目錄路徑 或 文件名 或 子目錄路徑及文件名 開頭的路徑分隔符 / 或 \,再拼接filePathName = filePathName + subDirectoryPathAndFileName.substring(1);} else {// 直接拼接filePathName = filePathName + subDirectoryPathAndFileName;}}return filePathName;}/*** 是否是主目錄,即 Linux:以 / 開頭,windows:第二位字符是 :* @param mainDirectoryPath 主目錄路徑*                          如 windows:D:/MyCode/file 或 D:\\MyCode\\file,Linux:/MyCode/file*                          如 windows:D:/MyCode/file/ 或 D:\\MyCode\\file\\,Linux:/MyCode/file/* @return true 或 false*/public static boolean isMainDirectoryPath(String mainDirectoryPath) {// 安全檢查主目錄路徑,Linux:以 / 開頭,windows:第二位字符是 :return mainDirectoryPath != null &&!mainDirectoryPath.isEmpty() &&(mainDirectoryPath.startsWith("/") || (mainDirectoryPath.length() > 2 && mainDirectoryPath.charAt(1) == ':'));}/*** 解析文件,提取文件中的文本內容** @param file 文件* @return 文件中的文本內容* @throws IOException IO異常* @throws TikaException Tika異常*/public static String parseFile(File file) throws IOException, TikaException {return tika.parseToString(file);}/*** 解析文件,提取文件流中的文本內容** @param fileStream 文件流* @return 文件中的文本內容* @throws IOException IO異常* @throws TikaException Tika異常*/public static String parseFile(InputStream fileStream) throws IOException, TikaException {return tika.parseToString(fileStream);}
}

服務類:

src/main/java/com/weiyu/service/FileService.java

src/main/java/com/weiyu/service/impl/FileServiceImpl.java

package com.weiyu.service;import org.apache.tika.exception.TikaException;import java.io.File;
import java.io.IOException;
import java.io.InputStream;/*** 文件 Service 接口*/
public interface FileService {/*** 解析文件,提取文件中的文本內容** @param file 文件* @return 文件中的文本內容* @throws IOException IO異常* @throws TikaException Tika異常*/String parseFile(File file) throws TikaException, IOException;/*** 解析文件,提取文件流中的文本內容** @param fileStream 文件流* @return 文件中的文本內容* @throws IOException IO異常* @throws TikaException Tika異常*/String parseFile(InputStream fileStream) throws TikaException, IOException;
}

src/main/java/com/weiyu/service/impl/FileServiceImpl.java

package com.weiyu.service.impl;import com.weiyu.service.FileService;
import org.apache.tika.Tika;
import org.apache.tika.exception.TikaException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.io.File;
import java.io.IOException;
import java.io.InputStream;/*** 文件 Service 接口實現*/
@Service
public class FileServiceImpl implements FileService {@Autowiredprivate Tika tika;/*** 解析文件,提取文件中的文本內容** @param file 文件* @return 文件中的文本內容* @throws IOException IO異常* @throws TikaException Tika異常*/@Overridepublic String parseFile(File file) throws TikaException, IOException {return tika.parseToString(file);}/*** 解析文件,提取文件流中的文本內容** @param fileStream 文件流* @return 文件中的文本內容* @throws IOException IO異常* @throws TikaException Tika異常*/@Overridepublic String parseFile(InputStream fileStream) throws TikaException, IOException {return tika.parseToString(fileStream);}
}

3、前后端聯合應用

3.1、前端 Vue3

API:qualityFile.ts

/*** 從文件或文件流中提取文本內容* @param fileNo 文件編號(可能包含非安全字符,如:4.2 2人員v∕V/v+DW=dw,其中空格、全角斜杠∕、半角斜杠/、加號+、非ASCII字符??(如中文、日文等),這些字符為非安全字符,在URL中都會被編碼傳輸)* @returns 文本內容*/
export const qualityFileParseService = (fileNo: string) => {return request.get("/resources/qualityFile/parse", {params: {fileNo: fileNo}});
};

UI:QualityFile.vue

// 提取
const onParseClick = async (fileNo: string) => {const result = await qualityFileParseService(fileNo);store.currentParseFileText = result.data;// 顯示質量體系文件文本提取內容模態框showContentDialogRef.value?.showDialog();
};<BasePreventReClickButtonclass="table-btn"type="primary"size="default"text:loading="false":disabled="scope.row.isNullContent"@click="onParseClick(scope.row.fileNo)">提取</BasePreventReClickButton><!-- 顯示質量體系文件文本提取內容模態框 --><BaseShowContentDialog ref="showContentDialogRef" title="提取的文本內容" :content="store.currentParseFileText" />

3.2、后端 Spring Boot

Controller:QualityFileController.java

    /*** 從文件或文件流中提取文本內容** @param fileNo 文件編號(可能包含非安全字符,如:4.2 2人員v∕V/v+DW=dw,其中空格、全角斜杠∕、半角斜杠/、加號+、中文為非安全字符)* @return 文本內容* @apiNote 本接口使用防抖機制,3s 內重復請求會被忽略*/@GetMapping("/parse")@Debounce(key = "/resources/qualityFile/parse", value = 3000)public Result<String> parse(String fileNo) throws TikaException, IOException {log.info("【質量體系文件】,提取文件中的文本內容,/resources/qualityFile/parse,fileNo = {}", fileNo);String fileContentStr = qualityFileService.parse(fileNo);return Result.success(fileContentStr);}

Service:QualityFileService.java

    /*** 從文件或文件流中提取文本內容*/String parse(String fileNo) throws TikaException, IOException;

Service 實現(使用文件工具類實現):QualityFileServiceImpl.java

    /*** 從文件或文件流中提取文本內容*/@Overridepublic String parse(String fileNo) throws TikaException, IOException {// 獲取文件數據FileData fileData = qualityFileMapper.selectFileData(fileNo);// 從文件名中獲取路徑分隔符String pathSplitString = FileUtils.getPathSplitString(fileData.getFileName());// 有路徑分隔符,提取本地磁盤中文件的文本內容if (!pathSplitString.isEmpty()) {// 獲取文件絕對路徑String filePathName = FileUtils.joinDirectoryPath(mainDirectoryPath, fileData.getFileName());// 提取本地磁盤中文件的文本內容return FileUtils.parseFile(new File(filePathName));}// 無路徑分隔符,提取數據庫中文件流的文本內容else {InputStream fileStream = new ByteArrayInputStream(fileData.getFileContent());// 提取數據庫中文件流的文本內容return FileUtils.parseFile(fileStream);}}

Service 實現(使用文件服務類實現):WorkInstructionServiceImpl.java

    @Autowiredprivate FileService fileService;    /*** 從文件或文件流中提取文本內容*/@Overridepublic String parse(String fileNo) throws TikaException, IOException {// 獲取文件數據FileData fileData = qualityFileMapper.selectFileData(fileNo);// 從文件名中獲取路徑分隔符String pathSplitString = FileUtils.getPathSplitString(fileData.getFileName());// 有路徑分隔符,提取本地磁盤中文件的文本內容if (!pathSplitString.isEmpty()) {// 獲取文件絕對路徑String filePathName = FileUtils.joinDirectoryPath(mainDirectoryPath, fileData.getFileName());// 提取本地磁盤中文件的文本內容return fileService.parseFile(new File(filePathName));}// 無路徑分隔符,提取數據庫中文件流的文本內容else {InputStream fileStream = new ByteArrayInputStream(fileData.getFileContent());// 提取數據庫中文件流的文本內容return fileService.parseFile(fileStream);}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/96116.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/96116.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/96116.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

qqq數據結構補充

1.緒論1.存儲方式順序存儲&#xff1a;邏輯相鄰&#xff0c;物理相鄰鏈式存儲&#xff1a;邏輯相鄰&#xff0c;物理不一定相鄰2.線性表1.順序表1.不可擴容數組寫一個順序表1.在頭文件中應有#pragam once&#xff0c;防止頭文件多次編譯&#xff1b;如果頭文件多次編譯&#x…

Anaconda與Jupyter 安裝和使用

Anaconda內部集成了很多科學計算包&#xff0c;并且可以實現環境隔離 1. 安裝Anaconda 定義&#xff1a;Anaconda是一個集成的Python發行版&#xff0c;專為數據科學、機器學習和AI開發而設計。它包含了常用的Python庫、包管理工具&#xff08;Conda&#xff09;和Jupyter No…

5.后臺運行設置和包設計與實現

程序的入口點(想讓其后臺默認.exe進程運行)也可以不通過vs設置也可以通過定義預處理設置第三種就是沒有窗口的變成后臺運行的了 處理client傳來的數據包 第一步&#xff1a;咱們怎么設計一種包呢&#xff1f;FEFF在網絡環境里面出現的概率低所以就采用這個 自己數據包截斷了&am…

【開題答辯全過程】以 基于微信小程序校園綜合服務平臺的設計與實現為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

地級市人口集聚、經濟集聚、產業集聚與綠色經濟效率匹配數據(含區域經濟研究相關的控制變量,Excel|shp|免費數據)

D006 地級市人口集聚、經濟集聚、產業集聚與綠色經濟效率匹配數據&#xff08;含區域經濟研究相關的控制變量&#xff0c;Excel|shp|免費數據&#xff09;數據簡介今天我們分享的數據是2004-2020年地級市人口聚集、經濟聚集與綠色經濟效率匹配數據&#xff0c;并對其進行可視化…

視覺SLAM第7講:視覺里程計2(3D-2D:PnP、3D-3D:ICP)

接上文&#xff0c;視覺SLAM第7講&#xff1a;視覺里程計1&#xff08;特征點法、2D-2D對極約束&#xff09;&#xff0c;本節主要學習3D-2D:PnP、3D-3D:ICP。 目錄 7.7 3D-2D:PnP 7.7.1 直接線性變換&#xff08;DLT&#xff09; 7.7.2 P3P 1.原理 2.小結 7.7.3 最小化重…

友元的功能解析

目錄 一、友元的作用 二、實例說明 1. 友元方法 例&#xff1a; 2.友元類 例&#xff1a; 三、注意事項 一、友元的作用 1. 可以讓一個類外 函數 或 類對象 訪問一個 類內私有 成員或方法。 二、實例說明 1. 友元方法 例&#xff1a; 用friend 關鍵字在Tom 類中聲明…

GNSS校準氣壓計

1、gnss信號較好的時候得到的GNSS高&#xff0c;得到海拔高。2、氣壓計數據轉到標準數據然后計算出來海拔高。3、gnss高作基準 - 氣壓高 高差 &#xff1b;需要修正的是氣壓偏差&#xff0c;那么如何得到氣壓偏差1&#xff09;用gnss高 反求出一個氣壓&#xff0c;這個氣壓與…

基于Springboot + vue3實現的校園二手交易平臺

項目描述本系統包含管理員、用戶兩個角色。管理員角色&#xff1a;用戶管理&#xff1a;管理系統中所有用戶的信息&#xff0c;包括添加、刪除和修改用戶。配置管理&#xff1a;管理系統配置參數&#xff0c;如上傳圖片的路徑等。權限管理&#xff1a;分配和管理不同角色的權限…

新型存儲介質應用:CXL內存擴展技術與AI工作負載適配

點擊 “AladdinEdu&#xff0c;同學們用得起的【H卡】算力平臺”&#xff0c;H卡級別算力&#xff0c;80G大顯存&#xff0c;按量計費&#xff0c;靈活彈性&#xff0c;頂級配置&#xff0c;學生更享專屬優惠。 引言&#xff1a;AI計算的內存瓶頸挑戰 當前AI技術發展正面臨著一…

Java 多線程(二)

目錄synchronized刷新內存synchronized的特性可重入的出現死鎖的情況如何避免死鎖&#xff08;重點&#xff0c;死鎖的成因和解決&#xff09;volatile關鍵字wait和notify多線程的代碼案例餓漢模式和懶漢模式的線程安全問題指令重排序問題阻塞隊列使用自己實現一個阻塞隊列實現…

MySql 內外連接

1.內連接內連接實際上就是利用where子句對兩種表形成的笛卡兒積進行篩選&#xff0c;我們前面學習的查詢都是內連 接&#xff0c;也是在開發過程中使用的最多的連接查詢。 語法&#xff1a;select 字段 from 表1 inner join 表2 on 連接條件 and 其他條件&#xff1b;備注&…

【大前端】 斷點續傳 + 分片上傳(大文件上傳優化) 的前端示例

寫一個 斷點續傳 分片上傳&#xff08;大文件上傳優化&#xff09; 的前端示例。這樣即使網絡中斷&#xff0c;文件也可以從已上傳的部分繼續傳&#xff0c;不需要重新傳整個大文件。&#x1f539; 分片上傳 斷點續傳思路分片切割&#xff1a;把大文件切成固定大小的小塊&…

機器學習的發展與應用:從理論到現實

目錄 引言 一、機器學習的發展歷程 1. 萌芽階段&#xff08;1950s–1970s&#xff09; 2. 符號主義與統計學習階段&#xff08;1980s–1990s&#xff09; 3. 數據驅動與算法突破&#xff08;2000s–2010s&#xff09; 4. 深度學習崛起&#xff08;2012年至今&#xff09; …

Python實現訊飛星火大模型Spark4.0Ultra的WebSocket交互詳解

核心架構設計與初始化機制 代碼采用面向對象的設計模式構建了Ws_Param類作為核心配置載體。該類在初始化時接收四個關鍵參數:APPID(應用標識)、APIKey(接口密鑰)、APISecret(簽名秘鑰)和Spark_url(服務端點地址)。通過urlparse模塊解析URL結構,分離出主機名(host)與…

如何通過Linux在高通躍龍QCS6490 平臺上優化部署AI/ML模型?

簡介 高通于今年推出了高通躍龍&#xff0c;在邊緣提供前沿的AI性能和超低延遲&#xff0c;為可擴展的工業創新帶來新的可能性。研華已在各種規格尺寸的嵌入式方案中采用躍龍技術&#xff0c;包括由高通躍龍 QCS6490處理器支持的嵌入式模塊、單板電腦和AI攝像頭解決方案。研華…

MySQL內核革新:智能攔截全表掃描,百度智能云守護數據庫性能與安全

在日常數據庫運維中&#xff0c;“掃表風暴”數次悄然而至——某條未走索引的 SQL 突然執行全表掃描&#xff0c;短短幾分鐘內吃光 IO、拖高 CPU&#xff0c;最終引發集群抖動甚至服務不可用。這樣的事故&#xff0c;你是否也曾經歷過&#xff1f; 全表掃描&#xff08;Full Ta…

TCP 三次握手、四次揮手

三次握手 三次握手形象版&#xff0c;快速理解 deepseek 的象形比喻&#xff1a;三次握手建立連接就像打電話一樣&#xff1a; (1) A 打給 B&#xff0c;“喂&#xff0c; 你能聽到我說話嗎&#xff1f;” (2) B 回答 A&#xff0c;“嗯&#xff0c;可以聽到&#xff0c;你能聽…

數據管理戰略|1概念及組成部分

【小語】前面兩個文章講到了“數據管理戰略數字化轉型、數據驅動”三者之間關系,數字化改革中的原則與邏輯,本節用三次文章學習數據管理戰略內容的組成部分(DAMA數據管理第1章1.2.6節)。 數據戰略 VS 數字化轉型 VS 數據驅動 數據管理戰略|熵減與熵增相容原則 下文為【…

3.遠程控制網絡編程的設計上

RemoteCtrl.cpp// RemoteCtrl.cpp : 此文件包含 "main" 函數。程序執行將在此處開始并結束。 //#include "pch.h" #include "framework.h" #include "RemoteCtrl.h"#ifdef _DEBUG #define new DEBUG_NEW #endif// 唯一的應用程序對象C…