Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java apache poi和React通过API发送xls_Java_Reactjs_Apache Poi - Fatal编程技术网

使用Java apache poi和React通过API发送xls

使用Java apache poi和React通过API发送xls,java,reactjs,apache-poi,Java,Reactjs,Apache Poi,我正试图从JavaSpring服务器向react客户端发送一个xls文件 使用默认的ApachePOI构造函数创建xlsx文件,这并不好。为了覆盖它,我必须使用FileOutputStream创建文件 FileOutputStream outputStream = new FileOutputStream("file.xls"); 但是我不能通过网络发送文件。我尝试使用以下答案:我引用:“下载文件时,您的代码需要逐块流式处理文件-这就是Java streams的用途。” 因

我正试图从JavaSpring服务器向react客户端发送一个xls文件

使用默认的ApachePOI构造函数创建xlsx文件,这并不好。为了覆盖它,我必须使用FileOutputStream创建文件

FileOutputStream outputStream = new FileOutputStream("file.xls");
但是我不能通过网络发送文件。我尝试使用以下答案:我引用:“下载文件时,您的代码需要逐块流式处理文件-这就是Java streams的用途。”

因此,我的控制器正在发送
InputStreamResource

如何使用我的
FileOutputStream
构造
InputStreamResource

这是我的客户:

 axios.get('/issues/export', { responseType: 'arraybuffer' }).then(response => {
        if (response && !response.error) {
            const blob = new Blob([response.payload.data], {type: 'application/vnd.ms-excel'});
            saveAs(blob);
        }
    });
资料来源:

编辑: 我用一个技巧做到了这一点,在我写入FileOutputStream之后,我打开了一个FileInputStream并返回了值

    FileOutputStream outputStream = new FileOutputStream("file.xls");
    workbook.write(outputStream);
    workbook.close();
    final InputStream fileInputStream = new FileInputStream("file.xls");
    return fileInputStream;
但是现在,作为对客户端的响应返回的xls文件已损坏,其中包含奇怪的字符:

excel文件应如下所示(在发送后取自myjava server):
问题已解决。最终,为了解决损坏的xls文件,我所做的是使用字节数组。控制器看起来完全相同,但现在返回类型为
ResponseEntity
。为了将
InputStream
转换为字节数组,我使用了
IOUtils.toByteArray()
方法

客户端代码也发生了一些变化,因为现在类型不再是
responseType:'arraybuffer'
,而是
'blob'

 axios.get('/issues/export', { responseType: 'blob' }).then(response => {
    if (response && !response.error) {
        const blob = new Blob([response.payload.data]);
        saveAs(blob);
    }
});
就这些

 axios.get('/issues/export', { responseType: 'blob' }).then(response => {
    if (response && !response.error) {
        const blob = new Blob([response.payload.data]);
        saveAs(blob);
    }
});