[英]FileUpload to Amazon S3 results in 0 byte file
我正在嘗試修復以下代碼在 S3 上生成 0 字節文件且沒有錯誤消息的錯誤。
此代碼將包含圖像和所需圖像路徑(來自數據庫包裝器對象)的 Stream(來自名稱不佳的 FileUpload4)饋送到 Amazon 的 S3,但文件本身從未上傳。
CloudUtils.UploadAssetToCloud(FileUpload4.FileContent, ((ImageContent)auxSRC.Content).PhysicalLocationUrl);
ContentWrapper.SaveOrUpdateAuxiliarySalesRoleContent(auxSRC);
第二行簡單地保存了數據庫對象,該對象存儲有關(據稱)上傳的圖片的信息。 這個保存正在進行,證明上面的行運行沒有錯誤。
在檢索適當的存儲桶名稱后,上面的第一行調用此方法:
public static bool UploadAssetToCloud(Stream asset, string path, string bucketName, AssetSecurity security = AssetSecurity.PublicRead)
{
TransferUtility txferUtil;
S3CannedACL ACL = GetS3ACL(security);
using (txferUtil = new Amazon.S3.Transfer.TransferUtility(AWSKEY, AWSSECRETKEY))
{
TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
.WithBucketName(bucketName)
.WithTimeout(TWO_MINUTES)
.WithCannedACL(ACL)
.WithKey(path);
request.InputStream = asset;
txferUtil.Upload(request);
}
return true;
}
我已經確保流是一個很好的流 - 我可以將它保存在我有權限的任何其他地方,存儲桶存在並且路徑很好(文件是在 S3 的目標處創建的,它只是沒有填充流的內容)。 我的智慧快要結束了,在這里 - 我錯過了什么?
編輯:我的一位同事指出,最好使用 FileUpload 的 PostedFile 屬性。 相反,我現在正在拉開它的流。 它仍然無法正常工作。
流的位置是否正確? 檢查 asset.Position 以確保位置設置為流的開頭。
asset.Seek(0, SeekOrigin.Begin);
編輯
好的,更多猜測(不過,我只能猜測):(所有這些都假設您仍然可以“手動”從傳入流中讀取數據)
只是為了測試,請嘗試 TransferUtility 上更簡單的 Upload 方法之一——也許只需要一個文件路徑字符串。 如果可行,那么可能需要在 UploadRequest 對象上設置其他屬性。
如果您在 UploadRequest 對象上掛鈎 UploadProgressEvent,您是否有任何其他線索可以說明發生了什么問題?
我注意到 UploadRequest 的 api 包括 InputStream 屬性和 WithInputStream fluent API。 也許設置 InputStream 有錯誤? 也許嘗試使用 .WithInputStream API
您使用的是哪個流? 您正在使用的流是否支持 mark() 和 reset() 方法。
可能是上傳方法首先計算給定流的 MD5 然后上傳它,所以如果你的流不支持這兩種方法,那么在 MD5 計算時它到達 eof 然后無法為流預置上傳目的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.