2009/01/22

[Linux] wget post file

我們在做 web 的時候,可以很簡單的在 server 上面寫這樣一個 php script 來 upload 一個檔案:
<?
$fn = $_FILES[test][name];
$temp = $_FILES[test][tmp_name];
$path = "/var/www/html/dl/a/";
copy($temp, $path.$fn);
?>


接著只要在網頁上建立這樣的標籤內容:
<form action="/dl/up.php" method="post" enctype="multipart/form-data">
<input type="file" name="test">
<input type="submit" value="submit">
</form>


一個簡單的 http file upload 模型就建起來了。

不過這樣的模式只適合有使用瀏覽器,有 GUI 的介面的使用者。今天如果是利用 wget 在 console 底下定時上傳檔案備份之類的行為,這樣就不適用 web 開上傳。

我們查看 wget 的 manpage 裡,可以查得到 --post-file 這個給 file upload 的參數,在實做上面,只需要加上 mime-type 的標頭就可以讓 server page 知道今天是要做 file upload 的行為,這個指令會像是:
wget http://192.168.1.128/dl/up.php --post-file=post.data --header="Content-Type: multipart/form-data; boundary=FILEUPLOAD" -O /dev/null --http-user=admin --http-password=test1234


post.data 在 manpage 裡面有說明到,其實 post data 就是 cgi post 處理時從 stdin 讀進來的資料,就長這樣:


--FILEUPLOAD
Content-Disposition: form-data; name="test"; filename="1.txt"
Content-Type: text/plain

12345

--FILEUPLOAD--


其中 boundry 的部份在 wget 送標頭的時候也要加上,這樣 server page 才會知道從哪邊開始讀。

沒有留言:

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...