我有一些比較大的文件(1MB-32MB),我需要從一個桌面應用程序將它們發送到PHP編寫的腳本(使用稱爲笨一個PHP框架的幫助)。由於文件是相當大的,我考慮到這些文件分割成小塊/包,編碼他們每個人Base64和一個通過JSON格式的消息給他們一個。從客戶端發送大文件到服務器,我的邏輯正確嗎?
我有關於如何將它們發送到服務器的想法,但我想先問問你什麼,你想想,如果你認爲這還好吧,或者如果它是有缺陷的。
這。由於英語不是我的母語,我更願意將它作爲兩個主題(客戶端和服務器)之間的對話。我以爲你會理解更好一點我想要做的事:
消息#1:
客戶:「嗨服務器,我需要一個-X-字節長送你。文件中的文件,我會送你將有-file_cheksum-的校驗「
服務器:」好,我已經準備好接受它的長度拆分它-N-小包,每個。 -Y-字節,並通過一個在這裏一個給他們,我會記住,如果你的消息,你提到你正在發送包如何與他們無關組裝文件具有ID -FILE_ID-「
消息#2:
客戶:」這是-N-的第一分組,爲了組裝一個-FILE_ID文件名爲該分組所需的 - , 和這裏的第一個數據包的校驗和,所以你可以看看這個包在良好的狀態已經到來「
服務器:」謝謝你的客戶,我只是記住了他在一個臨時文件夾。繼續下去 「
...
消息#N + 1:
客戶:」。這裏是-N-的-N-包,這是最後一個數據包,它的組裝一臺名爲-FILE_ID-, 文件要求和這裏的最後一個數據包的校驗,所以你可以檢查數據包中的「
服務器:」好身材已經來臨感謝您的客戶端,我只是組裝TOG對所有數據包進行封裝並驗證校驗和; 生成的文件是確定的。好工作。」
每個消息將通過HTTP POST由服務器發送,將與JSON被格式化,以及含有該文件的一部分的每個分組將以Base64編碼,然後進行解碼。下面是從客戶端發送到服務器的消息的示例:
{
"request": "set-packet",
"id": " [ file ID ] ",
"packet":
{
"file": " [ here goes the packet in Base64 ] ",
"checksum": " [ here goes the checksum ] "
}
}
如果一切都還好吧,服務器會迴應:
{
"status": "ok",
"message": "packet memorized"
}
如果有一個問題,在服務器,而不是將例如響應:
{
"status": "error",
"message": "Checksum doesn't match, try again"
}
您對這種邏輯有什麼看法?它是正確的還是有缺陷的,你會對它做出改進嗎?
謝謝
ftp有什麼問題? – 2011-09-19 06:36:57
問題是服務器可能安裝在託管網站上。不幸的是,FTP訪問可能並不總是一個選項。 – Cesco
Multipart POST會有幫助嗎? – Kris