TreeFrog (C++ Web Framework)开发之http文件服务器

原创 2013年12月26日 12:29:36

    开发者使用 treefrog 建立的工程,生成的是动态库,会被 tfserver 加载,tfserver 将 URL 处理为 controller 、 action 、 argument 三部分,参考 URL Routing 这个文档。如下:

/controller-name/action-name/argument1/argument2/...

    对应到我们的 fileserver 这个工程,controller-name 是 fileserver , action-name 是files ,argument1 是具体的文件名。访问文件时使用这样的地址:http://localhost:8800/fileserver/files/xxx 。

    我们简单的改造之前的 HelloWorld 示例即可得到一个 http 文件服务器。

    头文件如下:

#ifndef FILESERVERCONTROLLER_H
#define FILESERVERCONTROLLER_H
#include "applicationcontroller.h"

class T_CONTROLLER_EXPORT FileServerController : public ApplicationController
{
    Q_OBJECT
public:
    FileServerController(){}
    FileServerController(const FileServerController &other);

public slots:
    void index();
    void files();
    void files(const QString &param);
};

T_DECLARE_CONTROLLER(FileServerController, fileservercontroller);

#endif // FILESERVERCONTROLLER_H

    上述代码中,public slots: 下面的部分就是 action 。当 tfserver 解析完 URL 后,就会调用到这些 action 。我们添加了两个名为 files 的 slot 。

    下面是源文件:

#include "fileservercontroller.h"
FileServerController::FileServerController(const FileServerController &other)
    : ApplicationController()
{}

void FileServerController::index()
{
    renderText("Denied");
}

void FileServerController::files()
{
    renderText("Invalid parameter");
}

void FileServerController::files(const QString &param)
{
    sendFile(param, "application/octet-stream", "");
}

T_REGISTER_CONTROLLER(fileservercontroller);

    我们在 files 的实现中,仅仅是调用 sendFile 来发送文件。其实跟踪 sendFile 会发现,这个函数仅仅是找到文件并打开,将一个 QIODevice 对象指针赋值给 THttpResponse 的 bodyDevice 成员。后续会在 TActionThread 中用这个 bodyDevice 做实际的数据发送动作。在打开文件时,param会作为文件名,在网站根目录下查找(示例中是工程根目录)。

    现在,我们可以通过 http://localhost:8800/fileserver/files/appbase.pri 这个 URL 来测试一下下载。我这里是正常工作的。

版权声明:本文为foruok原创文章,转载请通过订阅号“程序视界”联系foruok获取授权。 https://blog.csdn.net/foruok/article/details/17580265

c++文件服务器架构逻辑

文件服务器,fastdfs
  • wenfh2020
  • wenfh2020
  • 2016-11-08 08:41:28
  • 886

自己开发简单web服务器一(C++开源库websocketpp实现)

简要 Websocketpp,开源跨平台web库,网络请求使用boost::asio实现(Windows上是IOCP完成端口)。具体介绍可见以前的一篇说明:http://blog.csdn.net/m...
  • mfcing
  • mfcing
  • 2016-11-04 21:11:19
  • 5628

c++实现的文件上传下载服务器

  • 2012年11月13日 10:07
  • 3.66MB
  • 下载

用C++实现HTTP服务器 - Windows平台(开放源代码)

用C++实现HTTP服务器 - Windows平台 软件名: Que's HTTP Server  (点击下载最新版含源代码) 作者: 阙荣文 - Que's C++ Studio    版权说明: ...
  • querw
  • querw
  • 2011-07-08 17:19:47
  • 61290

C++ 简单实现HTTP GET/POST 请求

转载出处:详情http://m.blog.csdn.net/article/details?id=16336713 HTTP(超文本传输协议)是一种客户端与服务端的传输协议,最早用于浏览器和服务...
  • u011715883
  • u011715883
  • 2016-05-04 09:56:48
  • 5385

构建基于Nginx的文件服务器思路与实现

在Web项目中使用独立的服务器来保存文件和图片的好处很多,如:便于统一管理,分流web服务器的压力,可进行访问加速等.另外当web服务器需要做集群进行负载均衡时,图片和文件上传在各个服务器之间同步将是...
  • joeyon
  • joeyon
  • 2015-06-24 17:02:05
  • 1581

最好的HTTP文件服务器

  • 2009年10月11日 14:33
  • 749KB
  • 下载

C++ http fileserver 开发手记

目录:https://github.com/archimekai/filesever05/ 1         连接约定 规定使用localhost:8080/files/[path]来访问目...
  • archimekai
  • archimekai
  • 2015-12-16 16:56:21
  • 668

c++<em>文件</em>post上传<em>服务器</em>

c++<em>文件</em>post上传<em>服务器</em> 立即下载 上传者: herui 时间: 2007-12-25 综合评分: 4 积分/C币:5 c<em>+c%2B%2B</em>程序员面试宝典 立即下载 上传者: heng721 时间...
  • 2018年04月18日 00:00

C++大文件传输

C/C++大文件/数据网络传输方法总结 在C/C++网络编程中不免会遇到需要传输大数据、大文件的情况,而由于socket本身缓冲区的限制,大概一次只能发送4K左右的数据,所以在传输大数据时客户端就需要...
  • luguifang2011
  • luguifang2011
  • 2014-05-18 09:53:28
  • 2193
收藏助手
不良信息举报
您举报文章:TreeFrog (C++ Web Framework)开发之http文件服务器
举报原因:
原因补充:

(最多只允许输入30个字)