Https

當網站訪問者使用文件上傳框時,Web 伺服器是否知道總文件大小?

  • May 6, 2018

客戶希望在其網站上允許文件上傳功能,用於大小不超過 1GB 的任何文件。

當站點訪問者發送 HTTP POST 請求時,伺服器是否知道文件大小

$$ content-length $$在請求開始時發送還是必須獲取整個文件才能獲得真實的文件大小? 伺服器將是啟用 https 的 linux 作業系統上的 apache 或 nginx。處理語言將是 php 7。

這些文件將根據客戶的要求直接上傳到亞馬遜 s3 儲存桶。

正如@duskwuff 部分提到的,如果您允許使用者將文件直接上傳到 S3,那麼您可以通過 S3 儲存桶策略限制上傳對象的大小。

S3 儲存桶策略

可以在此處找到對 S3 儲存桶策略的良好描述:

S3 儲存桶策略指定對儲存桶策略附加到的儲存桶上的哪些委託人允許或拒絕哪些操作(例如,允許使用者 Alice PUT 但不允許刪除儲存桶中的對象)。

這裡有一個很好的範例儲存桶策略集合。採用其中一個並對其進行修改,允許任何人將文件上傳到 S3 儲存桶但將文件大小限制為 1GB 的策略是:

{
 "Version": "2012-10-17",
 "Id": "S3PolicyId1",
 "Statement": [
   {
     "Sid": "AllowPublicUpload",
     "Effect": "Allow",
     "Principal": "*",
     "Action": "s3:PutObject",
     "Resource": "arn:aws:s3:::examplebucket/*",
     "Condition": {
       ['content-length-range', 1, 1073741824] //min and max
     } 
   } 
 ]
}

這使用了這裡描述的內容長度範圍條件:

上傳內容的最小和最大允許大小。

此條件支持內容長度範圍條件匹配類型。

其他注意事項

如果您想將上傳限制為特定使用者,或強制使用者將上傳放在主文件夾(即名稱對他們來說唯一的文件夾)中,那麼您應該檢查Amazon Cognito。使用 Cognito,您將使用 IAM 策略,其中包含表示 Cognito 使用者 ID 等的變數。

最後要記住的是 s3:PutObject 可以覆蓋文件,因此在決定允許使用者上傳到哪裡時請記住這一點。

引用自:https://serverfault.com/questions/910920