2016-07-04 102 views
3

我正嘗試生成客戶端可用於將圖像上傳到特定S3存儲桶的預簽名URL。我已經成功地生成的請求,以獲取文件,就像這樣:爲Amazon S3生成最大內容長度的預簽名PUT url

GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucket, filename); 
urlRequest.setMethod(method); 
urlRequest.setExpiration(expiration); 

其中到期和方法日期和列舉HTTPMethod分別對象。

現在我試圖創建一個URL來允許用戶PUT文件,但我無法弄清楚如何設置最大內容長度。我找到了有關POST policies的信息,但我更願意在這裏使用PUT - 我也想避免構建JSON,儘管這看起來不可能。

最後,替代答案可能是某種方式將圖片上傳從API網關傳遞到Lambda,以便在驗證文件類型和大小(這不是理想的)後,我可以將它從Lambda上傳到S3。

回答

1

儘管我沒有設法限制上傳文件的大小,但我最終創建了一個在上傳到臨時存儲區時激活的Lambda函數。該函數有一個像下面

public static void checkUpload(S3EventNotification event) { 

簽名(這是值得注意的,因爲到了存在的所有導遊我在網上找到指S3Event類似乎並不)

功能拉文件的元數據(而不是文件本身,因爲這可能會被視爲大量下載)並檢查文件大小。如果可以接受,它會下載文件,然後將其上傳到目標存儲桶。如果不是,它只是刪除文件。

這是遠遠不夠理想的,因爲上傳不符合標準似乎可以正常工作,但之後根本不會出現(因爲S3將在上傳時發佈200狀態代碼而不關注Lambda的響應)。

這實際上是一種解決方法,而不是解決方案,所以我不會接受這個答案。