CppCMS支援檔案上傳

2021-08-26 22:42:56 字數 3594 閱讀 8555

http檔案上傳

先製作乙個簡單的html頁面,只包含了乙個form

form採用post方法提交. enctype的內容應該填寫mime_type,規定from的資料傳送給伺服器之前如何編碼。

這裡為了檔案上傳,必須指定multipart/form-data,也就是要求不要編碼。

具體參考文件:

mime

因為已經涉及到mime,這裡順便介紹一下。全稱是multipurpose internet mail extensions.

這個對mail的擴充套件協議允許mail message能夠支援非ascii字元,二進位制格式附件等多種格式。

它的寫法格式是:

content-type: [type]/[subtype]; parameter
比如multipart是 type, form-data是 subtype。

具體請參考:

http協議有時候也會使用mime,但並不完全遵循mime。

cppcms示例

這個程式很簡單,upload 乙個pdf檔案,然後儲存到檔案系統。我沒有使用cppcms的form類,因為那是用c++類渲染html form以及裡面的html tags。就像jsf一樣,會把事情搞複雜。我並不欣賞這種設計。因此我用的是cppcms的最基本的方法,從request裡獲取上傳的檔案物件,然後儲存到磁碟上。因此我的例子比cppcms的example更好理解。

首先建立cmake工程,目錄結構如下:

chenshu@chenshu-beijing:~/work/research/upload$ tree

.├── cmakelists.txt

├── config.js

├── include

│ ├── controller

│ │ └── upload_site.h

│ └── model

│ └── content.h

├── src

│ ├── cmakelists.txt

│ ├── controller

│ │ └── upload_site.cpp

│ ├── main.cpp

│ └── view

│ └── upload.cpp

└── template

└── upload.tmpl

7 directories, 9 files

因為cppcms也是乙個mvc架構,controller目錄中的upload_site.cpp負責:

1.負責呼叫渲染引擎,生成並返回網頁

2.將不同的http url對映到不同的函式

template目錄存放了要渲染的網頁模板檔案。

view目錄存放了cppcms解析模板檔案生成的c++類

model存放了渲染網頁時需要的資料

現在看一下config.js,配置很簡單:

好,將一開始的html頁面轉成upload.tmpl檔案。

<% c++ #include "model/content.h" %>

<% skin upload %>

<% view upload_view uses content::upload_content %>

<% template render() %>

<% end template %>

<% end view %>

<% end skin %>

model/content.h就是乙個目前什麼都沒有的c++類,以便日後使用:

#ifndef content_h

#define content_h

#include namespace content ;

}#endif

現在重點看一下controller,

upload_site.h

public:

upload_site(cppcms::service &srv);

void upload_page();

void process_uploaded_file();};

upload_site.cpp

#include "controller/upload_site.h"

#include #include "model/content.h"

#include using namespace std;

//web page

dispatcher().assign("/upload" , &upload_site::upload_page, this);

dispatcher().assign("/process_uploaded_file" , &upload_site::process_uploaded_file, this);

}void upload_site::upload_page()

void upload_site::process_uploaded_file()

}

我的src/cmakelists.txt

cmake_minimum_required(version 2.8)

set(cmake_build_type debug)

set(template_dir $/template)

set(view_dir $/src/view)

find_package (threads)

find_package(boost components system filesystem required)

include_directories($/include)

add_definitions(-wall)

add_custom_command(

output $/upload.cpp

command cppcms_tmpl_cc $/upload.tmpl -o $/upload.cpp

depends $/upload.tmpl

)aux_source_directory($/src cpp_list1)

set(cpp_list2 $/upload.cpp )

aux_source_directory($/src/controller cpp_list3)

add_executable(upload $ $ $)

target_link_libraries(upload $ $ cppcms booster)

編譯執行後,通過瀏覽器訪問

然後upload乙個pdf檔案。到/home/chenshu/下尋找這個pdf檔案。

我用md5sum對比了原始檔和**儲存的檔案,md5相同。

成功。

聊一聊jquery檔案上傳(支援多檔案上傳)

談到檔案上傳,現在一般都用現成的元件可以使用。pc端的可以使用uploadify。針對微 h5也有uploadifive。但是這元件並不能滿足各種場景的需求,例如 預覽 切圖 放大縮小,取消之類的。html 服務端 後端 沒什麼不同的,一直就是如此 主要是前端html,我標記為紅色字型的屬性乙個都不...

設定php支援上傳大檔案

1 file uploads on 是否允許http檔案上傳。預設值為on允許http檔案上傳,此選項不能設定為off。2 upload tmp dir d wamp tmp 檔案上傳的臨時存放目錄。如果沒指定則php會使用系統預設的臨時目錄。該選項預設為空,此選項在手動配置php執行環境時,也容易...

支援多檔案上傳檔案的外掛程式uploadify

然後就上傳成功了,接下來,就來分析一下uploadify的具體使用方法。外掛程式需要使用jquery外掛程式支援,這句話是引入uploadify外掛程式中的樣式檔案,預設情況下不需要改。在index.php中的js的 中 timestamp是上傳的當前時間。swf是多 檔案,就是flash動畫,上圖...