尝试使用 HTTP/REST 服务器传输大文件时出现访问冲突错误

Access violation error while attempting to transfer a large file using HTTP / REST server

使用 REST 库,我试图将其设置为文件共享服务器,但在传输大文件时 运行 遇到问题。

据我了解,文件传输应该意味着打开文件流,在 stringstream 中获取其缓冲区,然后将其写入响应主体。这似乎适用于只有几个字节或 KB 的小文件,但任何更大的文件都会失败。

    std::string filePath = "some_accessible_file";
    struct stat st;
    if(stat(filePath.c_str(), &st) != 0)
    {
        //handle it
    }
    size_t fileSize = st.st_size;
    std::streamsize sstreamSize = fileSize;
    std::fstream str; 
    str.open(filePath.c_str(), std::ios::in);
    std::ostringstream sstream;
    sstream << str.rdbuf();
    const std::string str1(sstream.str());
    const char* ptr = str1.c_str();
    response.headers().add(("Content-Type"), ("application/octet-stream"));
    response.headers().add(("Content-Length"), fileSize);
    if (auto resp = request.respond(std::move(response))) //respond returns shared pointer to respond type 
    {
                        
        resp->write(ptr, sstreamSize ); //Access violation for large files
        
    }

不太清楚为什么大文件会失败。文件类型有区别吗?我能够传输小文本文件等,但小 pdf 失败...

此错误的根本原因是 std::fstream 没有读取整个文件,因为它是以文本模式打开的。在 windows 中,这使得读取在文件结尾 (0x1A) 字符处停止。

解决方法是在 std::ios::binary 模式下打开文件。