小编Ale*_*hen的帖子

强制浏览器使用部分内容下载大文件

我的服务器托管要下载的大文件(文件可能存储在不同的文件服务器中,但不会存储在 Web 服务器中)。我的目的是让浏览器使用部分下载,以便网络服务器可以获取文件的一小部分而不是整个文件。

但是浏览器(chrome 66)发送的第一个 HTTP GET 请求没有Range. 所以我必须回复Status: 200 OK

要求:

GET http://fakefile/falke HTTP/1.1
Host: fakefile
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Run Code Online (Sandbox Code Playgroud)

响应路径 #1:

HTTP/1.1 200 OK
Date: Tue, 12 Jun 2018 04:58:58 GMT
Content-Type: text/plain
Content-Length: 8205926
Connection: keep-alive
Content-Range: bytes 0-1048575/8205926
Content-Disposition: attachment; filename="301050.11051.input.txt"
Accept-Ranges: bytes
Run Code Online (Sandbox Code Playgroud)

Content-Length是整个文件的大小,Content-Range是块的大小。

结果:浏览器认为 chunk 是整个文件,不再有 HTTP range …

http download fileserver

6
推荐指数
0
解决办法
1236
查看次数

如何将 std::bind 结果存储到 std::function

我想存储一个对象的回调std::function<int(int,int>>。当我使用 lambda 时,它工作得很好。但是当我使用std::bind成员函数时,它编译错误。

有示例错误代码。

#include <functional>
#include <iostream>

using namespace std;

class A
{
public:
    void foo()
    {
        std::function<int(int,int)> callback = std::bind(&A::calc, this);
        // std::function<int(int,int)> callback = [this](int a, int b) { return this->calc(a, b); }; // lambda works fine
        int r = callback(3, 4);
        cout << r << endl;

    }

    int calc(int b, int c) { return b + c; }
};

int main()
{
    A a;
    a.foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

错误信息:

 In member function …
Run Code Online (Sandbox Code Playgroud)

c++ stdbind

3
推荐指数
1
解决办法
2023
查看次数

通过Makefile进行多源分离编译

我编写了一个简单的 Makefile 来编译几种类型的源代码。而且效果很好。这个Makefile会找到所有的protobuf源码和C++源码。因此,制作程序将如下所示。

  1. protoc将生成C++源文件*.proto
  2. g++*.cpp将使用and编译目标文件*.pb.cc(由步骤 1 生成)
  3. g++(实际上是ld)将所有对象链接*.obj单个可执行文件

这个 Makefile 示例是:

# Define the protoc generator
PROTOC = protoc
INCLUDE = -I$(SOMEPLACE) 
LIB = -lxml2  -lpthread -lz

# The final single outputted executable
OUTPUT  = svrkit_adapter_v2

# Define the cpp source code/object result
SOURCES = $(wildcard *.cpp)
OBJECTS=$(SOURCES:.cpp=.o)

# Define the proto's source/generated result/object result
PROTO_SOURCES = $(wildcard *.proto)
PROTO_CPPSRC = …
Run Code Online (Sandbox Code Playgroud)

makefile

2
推荐指数
1
解决办法
948
查看次数

标签 统计

c++ ×1

download ×1

fileserver ×1

http ×1

makefile ×1

stdbind ×1