今天,將前端代碼部署到服務器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上,由於安全限制,可能某些端口沒有開啟,所以就出現阻塞。