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動畫,上圖...