码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-11-23 07:02:07      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   ar   color   os   使用   sp   

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

 

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


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

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

    头文件如下:

 

  1. #ifndef FILESERVERCONTROLLER_H  
  2. #define FILESERVERCONTROLLER_H  
  3. #include "applicationcontroller.h"  
  4.   
  5. class T_CONTROLLER_EXPORT FileServerController : public ApplicationController  
  6. {  
  7.     Q_OBJECT  
  8. public:  
  9.     FileServerController(){}  
  10.     FileServerController(const FileServerController &other);  
  11.   
  12. public slots:  
  13.     void index();  
  14.     void files();  
  15.     void files(const QString &param);  
  16. };  
  17.   
  18. T_DECLARE_CONTROLLER(FileServerController, fileservercontroller);  
  19.   
  20. #endif // FILESERVERCONTROLLER_H  


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

    下面是源文件:

 

  1. #include "fileservercontroller.h"  
  2. FileServerController::FileServerController(const FileServerController &other)  
  3.     : ApplicationController()  
  4. {}  
  5.   
  6. void FileServerController::index()  
  7. {  
  8.     renderText("Denied");  
  9. }  
  10.   
  11. void FileServerController::files()  
  12. {  
  13.     renderText("Invalid parameter");  
  14. }  
  15.   
  16. void FileServerController::files(const QString &param)  
  17. {  
  18.     sendFile(param, "application/octet-stream", "");  
  19. }  
  20.   
  21. T_REGISTER_CONTROLLER(fileservercontroller);  


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

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

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

标签:style   blog   http   io   ar   color   os   使用   sp   

原文地址:http://www.cnblogs.com/yuyanbian/p/4116092.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!