![]() ![]() ![]() ![]() |
|||||
|
|||||
樓主 町風 ![]()
![]() |
但是檔案比較大時(900多kb就會) 所存檔都是0kb 我看post_max_size 8M 沒超過, 也沒錯誤訊息? 收到的image post的值是空的?
搜尋相關Tags的文章:
[ ajax ] ,
本篇文章發表於2018-03-30 18:20 |
1樓 |
一般來說,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
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔-- |
回覆 |
如要回應,請先登入. |