台灣最大程式設計社群網站
線上人數
915
 
會員總數:243160
討論主題:187980
歡迎您免費加入會員
討論區列表 >> PHP >> ajax post 容量有限制嗎?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
ajax post 容量有限制嗎?
價值 : 5 QP  點閱數:425 回應數:3

樓主

町風
初學者
29 205
1888 197
發送站內信

我用 ajax post 將canvas圖傳到後端儲存
但是檔案比較大時(900多kb就會) 所存檔都是0kb
我看post_max_size 8M 沒超過, 也沒錯誤訊息?
收到的image post的值是空的?





搜尋相關Tags的文章: [ ajax ] ,
本篇文章發表於2018-03-30 18:20
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

浩瀚星空
捐贈 VP 給 浩瀚星空 檢舉此回應
一般來說,post是沒有容量限制的。
其主因是在於操作系統中的限定。

你可以先試一下直接用form中的file看看是否可以上傳超過容量的值。
再利用一下form的特性,直接傳input大資料先試試。

我個人是使用form這個jquery插件,來處理ajax form。一般是沒什麼問題的。
早前我也是用ajax post來傳送base64的資料。確實會有個限制不會正常傳送。

原因有很多種。比較的可能性是因為javascript不能直接傳送大數據。
採用form這個jquery插件。它也是一種ajax的處理。不過處理的方式不太一樣。
所以可以正常傳送大數據。你或許可以改用這樣的方式來處理。
本篇文章回覆於2018-04-02 11:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

淺水員
檢舉此回應
試著在 ajax 之前(第8行)補上

這是確認你送出去的字串真的沒有超過8M

我猜想的原因是,你提到的900多k是原始圖檔的大小
如果原始圖檔是jpg格式的話,丟到canvas用png輸出,大小會多好幾倍
(而且不同瀏覽器產生的png大小也不同)
此外,二進位資料在轉換為Base64的過程中,大小又會增加約1.33倍
如此一來就超過8M的限制了

我傳送 3M 左右的資料到以下狀態的伺服器是可行的
post_max_size=8M
upload_max_filesize=2M

下面是我的測試用程式關於aaa.pdp
本篇文章回覆於2018-04-02 18:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
回應

淺水員
檢舉此回應
依照這個討論串做了實驗
下面是我剛剛做實驗的結論:

A.使用 ajax POST 傳 base64字串:
1. 長度限制要看 post_max_size
2. 轉base64的過程中原始資料會變大為1.33倍左右,因此原始檔案大小大約只能是 0.75 倍的 post_max_size

B.直接使用 form 傳送(包含使用jQuery Form Plugin):
1. 大小限制要看 upload_max_filesize
2. 原始檔案大小可以用 upload_max_filesize 為基準

因此,B方案雖然不會浪費空間
但是由於一般伺服器都會設定 post_max_size > upload_max_filesize
(像是 wamp 預設 post_max_size=8M upload_max_filesize=2M)
所以反而常常出現A方案能傳輸的檔案大小較大

除了上面兩個方案外
也有直接傳輸 binary data 的方法
client 用 HttpRequest 物件的 send(ArrayBuffer) 方法
php server 用 php://input 接收資料
應該是可以有 A 方案的長度限制,而且還不會浪費而直接使用 post_max_size
(不過這個我只確定可以跑,長度限制還沒仔細測試)
參考:Sending binary data

最後, canvas 產生的 png 體積還是比繪圖軟體產生的 png 大
所以如果只是上傳圖片不需要修圖
那可以直接用 FileReader 讀取後上傳
如果需要修圖,可以視情況存成jpg
或是去找看看有沒有優化 png 的js函式庫

萬一還是太大,就得考慮將1個圖檔分割上傳後再合併了
本篇文章回覆於2018-04-02 22:35
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

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