首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在NodeJs中将文件放入Tika-server

如何在NodeJs中将文件放入Tika-server
EN

Stack Overflow用户
提问于 2021-06-04 19:23:09
回答 1查看 346关注 0票数 0

场景

我正在运行VueJs客户端、NodeJs Restify API和官方码头形象之外的Tika服务器。用户使用包含要解析的PDF文件的formData进行formData调用。API服务器接收POST调用,我将PDF保存在服务器上。API服务器应该将文件放到Tika服务器上的unpack/all端点,并接收包含文本文件、元数据文件和PDF中的图像集的zip。然后,我将处理zip并将一些数据传回客户端。

问题

我创建一个缓冲区,其中包含要使用let parsingData = fs.createReadStream(requestFilename);let parsingData = fs.readFileSync(requestFilename);解析的文件,将axios数据字段设置为parsingData,然后提出请求。当我从Tika服务器获得响应时,Tika服务器似乎将请求视为空;在zip中,没有图像,文本文件为空,元数据

当我通过CURL curl -T pdf_w_images_and_text.pdf http://localhost:9998/unpack/all -H "X-Tika-PDFExtractInlineImages: true" -H "X-Tika-PDFExtractUniqueInlineImagesOnly: true"> tika-response.zip向Tika服务器发出以下请求时,我会得到一个包含准确文本、元数据和剥离图像的响应压缩文件。

代码

代码语言:javascript
复制
let parsingData = fs.createReadStream('pdf_w_images_and_text.pdf');

axios({
    method: 'PUT',
    url: 'http://localhost:9998/unpack/all',
    data: parsingData,
    responseType: 'arraybuffer',
    headers: {
        'X-Tika-PDFExtractInlineImages': 'true',
        'X-Tika-PDFExtractUniqueInlineImagesOnly': 'true'
    },
})
.then((response) => {
    console.log('Tika-server response recieved');
    const outputFilename = __dirname+'\\output.zip';
    console.log('Attempting to convert Tika-server response data to ' + outputFilename);
    fs.writeFileSync(outputFilename, response.data);
    if (fs.existsSync(outputFilename)) {
        console.log('Tika-server response data saved at ' + outputFilename);
    }
})
.catch(function (error) {
    console.error(error);
});

问题

如何在NodeJs中对文件进行编码并将其附加到PUT请求,以便Tika-server在通过CURL发出请求时将其处理为它所做的事情。

EN

回答 1

Stack Overflow用户

发布于 2021-06-13 12:41:03

Axios发送内容类型为application/x form-urlencoded的请求,因此文件内容没有被检测和解析。

您可以通过传递文件的已知内容类型或应用程序/八位流的内容类型来更改这一点,以允许Apache自动检测。

下面是一个基于您问题的代码的示例,说明了这一点:

代码语言:javascript
复制
#!/usr/bin/env node

const fs = require('fs')
const axios = require('axios')

let parsingData = fs.createReadStream('test.pdf');

axios({
    method: 'PUT',
    url: 'http://localhost:9998/unpack/all',
    data: parsingData,
    responseType: 'arraybuffer',
    headers: {
        'X-Tika-PDFExtractInlineImages': 'true',
        'X-Tika-PDFExtractUniqueInlineImagesOnly': 'true',
        'Content-Type': 'application/octet-stream'
    },
})
.then((response) => {
    console.log('Tika-server response recieved');
    const outputFilename = __dirname+'/output.zip';
    console.log('Attempting to convert Tika-server response data to ' + outputFilename);
    fs.writeFileSync(outputFilename, response.data);
    if (fs.existsSync(outputFilename)) {
        console.log('Tika-server response data saved at ' + outputFilename);
    }
})
.catch(function (error) {
    console.error(error);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67842918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档