React-如何将API发送的大型zip文件作为字节数组提供服务

时间:2018-09-01 13:46:10

标签: reactjs download zip axios

我正在编写一个应用程序,以下载打包成zip格式的图像文件。

前端是一个React应用程序,一个POST调用会给后端提供文件列表,然后后端返回一个包含文件的zip。

这是前端代码:

#include<iostream>
#include<vector>
using namespace std;
int almostIncreasingSequence( vector<int> sequence );

int main(){
    int array[] = {40, 50, 60, 10, 20, 30};
    std::vector<int> vect (array, array + sizeof(array) / sizeof(int) );
    bool ret = almostIncreasingSequence(vect);

    if( ret ){
        std::cout<<"Array is strictly increasing.";
    }
    else{
std::cout<<"Array is not strictly increasing.";
    }
    return 0;
}
bool almostIncreasingSequence(std::vector<int> sequence) {
    int val = 0;
    int currentBig = sequence.at(0);
    for (int i = 1; i < sequence.size(); i++){
        if( currentBig < sequence.at(i))
        {
            currentBig = sequence.at(i);
        }
        else{
            val++;
            if( val>1)
            {
                return false;
            }
            if( i > 1 ){
                if (sequence.at(i) > sequence.at(i-2)){
                    if( currentBig < sequence.at(i) ){
                    }
                    else{
                        currentBig = sequence.at(i);
                    }
                }
            }
            else{
                currentBig = sequence.at(i);
            }
        }
    }
    return true;
}

在后端,如本主题的最后一篇文章所述:实现“ toZip”方法:Spring REST - create .zip file and send it to the client

我试图将内容放入标记并模拟对其的单击。我得到一个“ file.zip” zip文件,其中包含一个名为“ file”的单个文件,即使将其提取并重命名为file2.zip

,也无法读取。

file.zip | --file

 onClickDownload = async () => {

    const {markedFileList} = this.state;

    let payload = {
      value: markedFileList,
    };

    const options = {
      method: 'POST',
      headers: {
        'accept': 'application/json',
        'content-type': 'application/x-www-form-urlencoded'
      },
      data: JSON.stringify(payload),
      url: `http://` + getHostAndPort() + `/rest/photo/toZip`,
    };
    axios(options).then(result => {
       this.downloadBlob(result.data, "file.zip", "application/zip");
    });
  }

我看过FileSavec lib:https://github.com/eligrey/FileSaver.js 问题:我想提供的图片zip可能大于lib的限制500Mb。我找到了一个示例,但不适用于> 1Gb文件How to save binary data of zip file in Javascript?

我也尝试使用fs本机界面 https://disjoint.ca/til/2017/09/20/how-to-download-a-binary-file-using-axios/

但是根据Dan的说法,它用于服务器端操作:https://github.com/facebook/create-react-app/issues/3988

我不想在后端生成zip,存储它并通过特定的URL提供它,因为我不想在下载后管理zip清理。

有没有一种简单的方法可以简单地获取字节数组并仅要求客户端保存它?

非常感谢您的帮助

此致

user7245912

0 个答案:

没有答案