台灣最大程式設計社群網站
線上人數
1140
 
會員總數:246207
討論主題:189786
歡迎您免費加入會員
討論區列表 >> CSS/HTML5/Bootstarp >> 關於input type=file
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於input type=file
價值 : 50 QP  點閱數:1313 回應數:10
樓主

張詩雨
門外漢
0 20
395 36
發送站內信

我想要做上傳的網頁,
但是我不是很清楚form post對於type=file的運作。
一般來說簡單的上傳網頁的前端是這樣處理:


那麼按下submit的按鈕後,
檔案是真的上傳到類似/tmp的資料夾了嗎?
還是沒有呢?
我的server是Linux系統,
如果上傳了,會放在/tmp裡還是哪裡呢?

謝謝大家幫忙喔!

本篇文章發表於2013-04-08 16:21
== 簽名檔 ==
既然走到不歸路,那麼如果有人說:「哇!會寫程式的女孩子,真厲害!」
也可以算是一種安慰吧?(雖然寫程式能力很差)
1樓
回應

Allen
捐贈 VP 給 Allen 檢舉此回應
表單送出後,檔案會傳給test.cgi
至於test.cgi將傳來的檔案存放到哪裡,就要看test.cgi怎麼寫的了
本篇文章回覆於2013-04-08 17:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

張詩雨
檢舉此回應
不好意思,還是不太明白耶?
傳給test.cgi時,檔案是什麼樣子??
我以為是傳到某個空間?
可以舉例嗎,謝謝喔!
本篇文章回覆於2013-04-08 18:47
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

香帥
檢舉此回應
我用您的程式碼做一個範例給您
您的檔案我命名為testupload.htm 您原來的程式碼
然後寫一個 cgi 程式命名為 test.cgi
程式碼如下:

測試網址在我 server http://ap.a168a.com/test/testupload.htm
在執行前要在 testupload.htm 所在目錄下建一個 tmp 次目錄,因為程式第4行我命名為 tmp 目錄,若您要讓人上載的是圖
就命名為 images 等隨您高興
執行結果1,如圖,看到我瀏覽slidemenu.jpg後按upload

上傳後顯示 slidemenu.jpg upload ok.
驗證是否已上傳ok
輸入網址http://ap.a168a.com/test/tmp/slidemenu.jpg
就可看到您上傳的圖
執行結果如下圖

本篇文章回覆於2013-04-08 22:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
作者回應

張詩雨
檢舉此回應
謝謝前輩們的指教!
可能是因為我對於POST還不太熟悉,因為我用POST只知道用name來抓取value,像是若file的name=welcome,那麼用post時以$_POST["welcome"]就能抓到檔案的路徑(就是選檔後的那串,只是因為瀏覽器不同,可能抓到的只有檔名)。
由於對perl不太熟,
可以請教一下
my $file = $cgi->param('welcome');
這行跟php的$_POST["welcome"]是一樣的道理嗎?
那麼他所代表的值大概長什麼樣呢?(是value還是檔案串流)
真的很謝謝您們!
本篇文章回覆於2013-04-09 09:39
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
回應

香帥
檢舉此回應
不大一樣
php請參考這篇去實作
http://phpmaster.com/file-uploads-with-php/
本篇文章回覆於2013-04-09 11:44
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

MIS2000 Lab
檢舉此回應
檔案上傳時,應該是串流 Stream的方式吧?
(我猜)

您不會的東西很多,應該趁早補上這些基礎
不然就很難進行下去喔

我看到您這些基礎不補齊,例如 POST / Perl語法等等
卻困在一些鑽牛角尖的東西上,好可惜啊
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^


簡單的說,我覺得您這些「補充」發問,都幫不了您
也沒法幫您寫完這些功能

你以為能從 "程式碼"裡面學到東西
事實上會一直困在「很多單字」上、很多看不懂的單字上
而不瞭解「整體」功能、「整體」流程

這就是我說的鑽牛角尖


本篇文章回覆於2013-04-09 11:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

張詩雨
檢舉此回應
目前我對於POST的認知(或者網路上看過的教學)
大概都是name=value之類的
像bourne shell 的cgi(就是#!/bin/sh開頭的)
假設按鈕name=Submit,則接收後的"$Submit"則會是按鈕的值(若他的value=發送則$Submit=發送)

我不懂的是form的形態加上enctype="multipart/form-data"
接著用post的方式在另一端(action的網頁)做處理。
若POST大概是name=value這樣的形式,
那麼type=file傳給另一個網頁後,大家所對他的處理是用什麼方式呢?
我看"multipart/form-data"的說明是:

說明

所以處理的方式都是跟接收POST的方式一樣嗎?
(只是根據form不同的編碼方式所以值不同)

麻煩大家幫忙解惑了!
本篇文章回覆於2013-04-09 13:32
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
最有價值解答

香帥
檢舉此回應
哇,精神可嘉,追根究底,
參考網路協定rfc才會知詳情
例如以下rfc post是http協定內的一小部份
http://tools.ietf.org/html/rfc2616#section-9.5
當您要寫http client或http server時就必需參考
那坊間的書也有,不過要找一下喔
您可以去實做一個陽春的ie,當您做post時,就會參考上述的rfc及相關的修訂rfc,就一定會知道原理的
我只寫過一個完整的irc client
參考以下rfc實作
http://www.ietf.org/rfc/rfc1459.txt
還有您也可以自創規格,當然英文要好,就可以將您規格上傳去審查認定
本篇文章回覆於2013-04-09 14:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

YD
捐贈 VP 給 YD 檢舉此回應
請參考 RFC 1867
http://www.ietf.org/rfc/rfc1867.txt
本篇文章回覆於2013-04-09 16:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

張詩雨
檢舉此回應
感謝各位前輩的指教!
其實我對於一些網路協定真的要好好研究(因為工作有接觸到,但我一直依賴同事所以沒好好學習)。

我會加油的,真的很謝謝大家的幫忙和解答!辛苦大家了!
本篇文章回覆於2013-04-09 21:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.