前端nginx+Java后台ftp處理頁面圖片上傳踩坑


今天,將前端代碼部署到服務器nginx上,在測試多圖片上傳時,報錯413請求體空間太大,請求都沒到后台,直接被nginx攔截,調整后又報錯504。

整體而言,前端存在兩處問題:

  413 錯誤 :Request Entity Too Large

  原因是nginx限制了上傳文件的大小,在nginx中可以配置最大允許的文件大小:

   打開nginx主配置文件nginx.conf,找到http{},添加

  client_max_body_size 50m;

  504 錯誤:gateway time out

  原因是后台處理上傳文件耗時較長,此處需修改代理對象的請求響應時間,即具體location的配置

  如下:

   proxy_connect_timeout 300s;

  proxy_send_timeout 300s;

  proxy_read_timeout 300s;

  注意:此處單位為秒。

  還沒完

  在處理完nginx的相關問題后,調用后台請求發現ftp一直上傳不成功,最初是連接超時,其后一直是上傳失敗。

  連接超時問題

  這里的關鍵在於,項目部署到了外網服務器,而ftp上傳路徑為內網ip+port。使用跳板機,配置代理的ip和port即可。

  上傳失敗問題

  這個問題就比較尷尬了,重新完善日志才將問題最終定位在這一行代碼:

    ftpClient.storeFile(filename,local);

  原因較為多元,可能是編碼格式問題,也有可能是服務端部署后遠程連接端口未配置的問題,

  這里針鋒相對的解決如下:

  此處統一編碼格式即可

    ftpClient.setControlEncoding("UTF-8");// 設置編碼格式    
ftpClient.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);// 設置文件流傳輸

  端口數據傳輸問題

    ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);// 設置上傳文件的類型為二進制類型

  調用FTPClient.enterLocalPassiveMode();這個方法的意思就是每次數據連接之前,ftp client告訴ftp server開通一個端口來傳輸數據。為什么要這樣做呢,因為ftp server可能每次開啟不同的端口來傳輸數據,但是在linux上,由於安全限制,可能某些端口沒有開啟,所以就出現阻塞。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM