簡體   English   中英

文件上傳到 Amazon S3 生成 0 字節文件

[英]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);

編輯

好的,更多猜測(不過,我只能猜測):(所有這些都假設您仍然可以“手動”從傳入流中讀取數據)

  1. 只是為了測試,請嘗試 TransferUtility 上更簡單的 Upload 方法之一——也許只需要一個文件路徑字符串。 如果可行,那么可能需要在 UploadRequest 對象上設置其他屬性。

  2. 如果您在 UploadRequest 對象上掛鈎 UploadProgressEvent,您是否有任何其他線索可以說明發生了什么問題?

  3. 我注意到 UploadRequest 的 api 包括 InputStream 屬性和 WithInputStream fluent API。 也許設置 InputStream 有錯誤? 也許嘗試使用 .WithInputStream API

您使用的是哪個流? 您正在使用的流是否支持 mark() 和 reset() 方法。

可能是上傳方法首先計算給定流的 MD5 然后上傳它,所以如果你的流不支持這兩種方法,那么在 MD5 計算時它到達 eof 然后無法為流預置上傳目的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM