从 Web 服务器读取 .docx 内容 url - java

Read .docx content from web server url - java

我有存储文件的 WEBDAV 服务器。它们可以通过 url e.q https://my-url.net/document.docx 获得。现在我想得到一些文件并阅读他的内容。我有什么:

public void getDocumentContent() throws ExternalIntegrationException {
        var client = getHttpClient();
       
            var download = new HttpGet(doc);
            try {
                InputStream input = client.execute(download).getEntity().getContent();
                String str = IOUtils.toString(input, StandardCharsets.UTF_8);
                System.out.println(str);
            } catch(IOException e) {
                throw new ExternalIntegrationException("Failure download file from " + webDavPath  + ". " +
                        "Details:" + e.getMessage(), e);
            }
        
    }

private HttpClient getHttpClient() {
        var credentialsProvider = new BasicCredentialsProvider();
        var credentials = new UsernamePasswordCredentials(userName, password);
        credentialsProvider.setCredentials(AuthScope.ANY, credentials);

        return HttpClientBuilder.create()
                .setDefaultCredentialsProvider(credentialsProvider)
                .build();
    }

我的System.out.printl(用于测试)在控制台中得到这个:

X�K����nDUA*�)Y����ă�ښl  1i�J�/z,'��nV���K~ϲ��)a���m ����j0�Hu�T�9bx�<�9X�
�Q���
�Iʊ~���8��W�Z�"V0}����������>����uQwHo��   �� PK    ! ���   N  _rels/.rels �(�                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 ���JA���a�}7�
ig�@��X6_�]7~
f��ˉ�ao�.b*lI�r�j)�,l0�%��b�
6�i���D�_���,   �   ���|u�Z^t٢yǯ;!Y,}{�C��/h>  �� PK    ! �d�Q�   1  word/_rels/document.xml.rels �(�                                                                                                                                                                                                                                                                 ���j�0���{-;���ȹ�@��� �����$���~�
�U�>�0̀�"S�+a_݃(���vuݕ���c���T�/<�!s��Xd3�� �����?'g![�?��4���%�9���R�k6��$C�,�`&g�!/=�  �� PK    ! �^��  "     word/document.xml�W]o�0}����y� ��"B���=T+�&�k�����wV���*�D�����s�mfW?
��k���0"�T3�6  yX��$p�*F�V��=8r5�n���Ns  ��\���{��K� �j
��[��S���|��,�)Ԧ�m�<5�*bhA �ܖנ�ע��mR�$���ٷ3m�1KwX)�w�2cu
�/����k�ga���Իۺ�⪽cgh���� 2_-�WA���`ô�x=�L�7��6�J�� ^ɶ�u:O'�cJ���2O�f:[Z���`�!�=��L,�!w��/�;��-���ٰK���<j�,��r>������/V<�B�~T�q�A����:������ZU��O7ܥx������Ͽ^h�b�^h��`���N�d�U�:��������s�r�Y��1��~��]㓿UϽ��]<��woO �F�ڟ
R�T����ߊ�9��q�Z

如何在不下载和读取文档内容的情况下从 URL 获取 .docx 文件并将其另存为字符串或者如果有更多文档则可能是 List ??

为什么它不适合你?

由于 docx 是一种基于 xml 的纯文本格式,其中包含二进制 blob - 您不能简单地将文档打印为字符串。

解法:

我建议将文件保存在本地,然后将其作为 FileInputStream 打开。 把最后的文件删掉就行了

如果无法在本地保存文件,可以convert the InputStream to FileInputStream.

将变量“input”设置为 FileInputStream 后 - 您可以使用以下代码:

import java.io.File;
import java.io.FileInputStream;
import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
    public void readDocxFile(FileInputStream input) {
            try {

                XWPFDocument document = new XWPFDocument(input);

                List<XWPFParagraph> paragraphs = document.getParagraphs();


                for (XWPFParagraph para : paragraphs) {
                    System.out.println(para.getText());
                }
                input.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }