Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Uploads Complete Without Error, Download URL Not Available (File Lost) #81

Open
abancroft0 opened this issue Nov 30, 2022 · 1 comment

Comments

@abancroft0
Copy link

abancroft0 commented Nov 30, 2022

We are seeing files that upload through the SDK & APIs without a problem, but when we go to check immediately after uploading for the file's s3 download URL, it returns nothing (null or empty string). When we go and check on the UI, we also cannot download the file, so it's essentially lost.

This has been on-going for a few months now, we had some code after the SDK to check that the URL for downloading worked, and if not we would retain the file and retry later. We disabled that temporarily and found that this issue is still happening.

We did modify the UploadFileAsync slightly, but only to allow uploading by Base64.

public async Task UploadFileAsync(UploadQuery query)
        {
            var uploadRequest = await RequestUploadInformationAsync(new RequestUploadQuery { Filename = query.Filename }).ConfigureAwait(false);

            uint chunkNumber = 0;

            if (!string.IsNullOrEmpty(query.Filepath)) {
                using var file = File.Open(query.Filepath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite | FileShare.Delete); int bytesRead = 0;
                var buffer = new byte[CHUNK_SIZE];
                long numberOfChunks = (file.Length + CHUNK_SIZE - 1) / CHUNK_SIZE;

                while ((bytesRead = file.Read(buffer, 0, buffer.Length)) > 0) {
                    ++chunkNumber;
                    await UploadPartAsync(Path.GetFileName(query.Filepath), buffer, bytesRead, chunkNumber, uploadRequest, (uint)numberOfChunks).ConfigureAwait(false);
                }
            } else if (!string.IsNullOrEmpty(query.Base64)) {
                byte[] bytes = Convert.FromBase64String(query.Base64);

                using MemoryStream file = new MemoryStream(bytes); int bytesRead = 0;
                var buffer = new byte[CHUNK_SIZE];
                long numberOfChunks = (file.Length + CHUNK_SIZE - 1) / CHUNK_SIZE;

                while ((bytesRead = file.Read(buffer, 0, buffer.Length)) > 0) {
                    ++chunkNumber;
                    await UploadPartAsync(query.Filename, buffer, bytesRead, chunkNumber, uploadRequest, (uint)numberOfChunks).ConfigureAwait(false);
                }
            } else if (query.Filebytes != null && query.Filebytes.Length > 0) {
                byte[] bytes = query.Filebytes;

                using MemoryStream file = new MemoryStream(bytes); int bytesRead = 0;
                var buffer = new byte[CHUNK_SIZE];
                long numberOfChunks = (file.Length + CHUNK_SIZE - 1) / CHUNK_SIZE;

                while ((bytesRead = file.Read(buffer, 0, buffer.Length)) > 0) {
                    ++chunkNumber;
                    await UploadPartAsync(query.Filename, buffer, bytesRead, chunkNumber, uploadRequest, (uint)numberOfChunks).ConfigureAwait(false);
                }
            }

            var finalizeResponse = await FinalizeUploadAsync(uploadRequest, chunkNumber).ConfigureAwait(false);

            if (await HasFinishedSuccessfullyAsync(finalizeResponse).ConfigureAwait(false))
            {
                var saveMediaQuery = new SaveMediaQuery {
                    Filename = query.Filename,
                    BrandId = query.BrandId,
                    ImportId = finalizeResponse.ImportId,
                    MediaId = query.MediaId,
                    Tags = query.Tags,
                    RelatedMediaMetapropertyId = query.RelatedMediaMetapropertyId,
                    DepartmentMetapropertyId = query.DepartmentMetapropertyId
                };

                if (!string.IsNullOrEmpty(query.RelatedMediaMetapropertyId) && !string.IsNullOrEmpty(query.RelatedMediaId)) {
                    saveMediaQuery.RelatedMediaMetapropertyValues = new List<string> { query.RelatedMediaId };
                }

                if (!string.IsNullOrEmpty(query.DepartmentMetapropertyId) && !string.IsNullOrEmpty(query.Department)) {
                    saveMediaQuery.DepartmentMetapropertyValues = new List<string> { query.Department };
                }

                var savedAsset = await SaveMediaAsync(saveMediaQuery).ConfigureAwait(false);
                query.MediaId = savedAsset.MediaId;
                Console.WriteLine($"Uploaded File Id {savedAsset.MediaId}");
            }
            else
            {
                // need to add to a processing queue
                throw new BynderUploadException("Converter did not finish. Upload not completed");
            }
        }
@TimBloembergen
Copy link

Hi @abancroft0,

Sorry for the late response on this issue. Could you try to upload a file and send me the mediaId that you get returned after uploading a file? I'd also need the portal url so I can see where the asset has gone to.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants