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获取授权。

C++基于TCP/IP简单的客户端、服务器通信程序实例

本篇文章实现了一个基于TCP 的
  • shenjie12345678
  • shenjie12345678
  • 2014年06月08日 21:45
  • 71049

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

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

C++利用socket的客户端和服务器之间传输文件

//服务器的代码文件有 /* message.h source.h source.cpp server.h server.cpp */ //客户端的代码文件有 /* message.h 和服务器端...
  • riyuedangkong1
  • riyuedangkong1
  • 2016年10月05日 17:38
  • 7638

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

文件服务器,fastdfs
  • wenfh2020
  • wenfh2020
  • 2016年11月08日 08:41
  • 779

C++实现HTTP上传

插件中需要一个上传文件的功能,我跟老大说,我想FTP上传,老大一瞪眼,那还得再布个FTP服务器,直接用HTTP上传多简单。         那么C++如何将文件上传HTTP服务器上呢?  HTTP...
  • srests
  • srests
  • 2016年02月26日 17:41
  • 5185

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

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

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

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

C++网站开发MVC框架TreeFrog Framework教程——1.简介

本文大致介绍了一个C++实现的用于网站开发的MVC框架——TreeFrog Framework的总体情况,使开发者对于这个框架有一个大致的认识。...
  • gg_18826075157
  • gg_18826075157
  • 2017年06月11日 19:39
  • 376

用Netty实现的简单HTTP服务器

用Netty实现的一个简单的HTTP服务器,可以处理静态文件,例子中的注释也比较全。主要是对HTTP的理解,接下来的文章中我也会更新一些HTTP相关的文章以及对例子的进一步完善,由浅到深,记录一些我的...
  • a351945755
  • a351945755
  • 2014年02月20日 08:35
  • 19157

关于WEB集群中文件服务器的讨论

在WEB集群中一般都要上传和删除图片。小规模的时候,图片放在本地,再通过同步方式来保持一致。 常见的文件服务器:samba+web,ftp+web,nfs+web,rsync单向同步,分布式存储 ...
  • guicaizhou
  • guicaizhou
  • 2016年04月29日 09:14
  • 703
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TreeFrog (C++ Web Framework)开发之http文件服务器
举报原因:
原因补充:

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