0

After scouring the web I am completely stuck on an application I am building to push directories up to Amazon S3 using C# (Targeting .NET 4.5). I am getting NullReferenceExceptions on the line of code that pushes the directory files using the UploadDirectory(TransferUtilityUploadDirectoryRequest) method of the TransferManager class. The problem is I cannot find anything that is null! The debugger doesn't show anything null either, so I'm obviously missing something here.

I read up that if you are uploading to buckets that have periods in them, you need to change the protocol to HTTP otherwise a NullReferenceException might be thrown, however I've done this as well and am continuing to receive the error, even when I created another bucket for testing that has no periods in it.

The portion of my code up to & including the line that causes the exception is below. The class called S3Info is just a helper class that I created that just stores some configuration info such as access/secret keys and other info:

public static void uploadDirectories(S3Info info, List<DirectoryInfo> dirs, Logger logger = null)
    {
        AmazonS3Config alterConfig = new AmazonS3Config();
        alterConfig.CommunicationProtocol = Protocol.HTTP;
        AmazonS3Client s3Client = new AmazonS3Client(info.getCredentials(), alterConfig);
        TransferUtility directoryTransferUtil = new TransferUtility(s3Client);
        TransferUtilityUploadDirectoryRequest uploadDirRequest;
        PutObjectRequest completeFileUploadRequest;
        uint uploadSuccessCount = 0;

        if (dirs == null || dirs.Count == 0)
        {
            logger.log("Nothing to upload.");
            return;
        }
        //upload directory with PDFs
        foreach (DirectoryInfo dir in dirs)
        {
            try
            {
                //configure upload request
                uploadDirRequest = new TransferUtilityUploadDirectoryRequest();
                uploadDirRequest.BucketName = info.selectedBucket.BucketName;
                uploadDirRequest.Directory = dir.FullName;
                uploadDirRequest.KeyPrefix = dir.Name + @"\";
                uploadDirRequest.SearchOption = SearchOption.TopDirectoryOnly;
                uploadDirRequest.SearchPattern = "*.pdf";
                uploadDirRequest.Timeout = 600000; //10 minutes

                //upload directory!
                directoryTransferUtil.UploadDirectory(uploadDirRequest); //exception thrown here

I'm a bit stuck at this point so I'm open to any suggestions the community can provide. Thanks.

EDIT: Stack Trace-

Object reference not set to an instance of an object. :    
at Amazon.S3.Transfer.Internal.UploadDirectoryCommand.Execute()

at Amazon.S3.Transfer.TransferUtility.UploadDirectory(TransferUtilityUploadDirectoryRequest request)

at S3Delivery.AmazonActions.uploadDirectories(S3Info info, List`1 dirs, Logger logger) in c:\Users\jblacker\Documents\Visual Studio 2012\Projects\S3Delivery\S3Delivery\AmazonActions.cs:line 173

Line 173 is the line referred to above.

2 Answers 2

1

A patched version of the SDK (version 1.5.30.1) was released earlier today that fixes this issue.

Sign up to request clarification or add additional context in comments.

Comments

1

I posted this same question on the AWS Forums. Apparently the API was broken for the method: UploadDirectory() in version 1.5.30 of the .NET SDK.

Amazon has just posted a patch as version 1.5.30.1

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.