Вызовы DropBox API Загрузка файла нулевого байта - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь загрузить файл в Dropbox, используя остальные вызовы, но он не загружает фактический файл, он загружает файл нулевого байта.

Пожалуйста, проверьте код и дайте мне знать, если я пропалчто-то.

var task = Task.Run((Func<Task<int>>)OrderExtractUsecase.DropBox);
task.Wait();
int x = task.Result;

Код задачи Dropbox:

static async Task<int> DropBox()
    {
        try
        {
            Dropbox_Utility objDropBox = new Dropbox_Utility("<accessid>");
            foreach (string temp in fileList)
            {
                await objDropBox.Upload("/Assist", temp);
            }
            return 1;
        }
        catch(Exception ex)
        {
            return -1;
        }
    }

Код задачи загрузки:

    public async Task<string> Upload(string folder, string filefullpath)
    {
         string filename = string.Empty;
         string fileID = string.Empty;
         try
         {
            filename = Path.GetFileName(filefullpath);

            using (FileStream fileStream = File.OpenRead(filefullpath))
            {
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    fileStream.CopyTo(memoryStream);
                    var response = await dbx.Files.UploadAsync(folder + "/" + filename, WriteMode.Overwrite.Instance, body: memoryStream);
                    fileID = response.Id;
                }
            }
        }
        catch (Exception ex) { throw; }
        finally { }
        return fileID;
    }

1 Ответ

0 голосов
/ 06 июня 2018

Как уже упоминалось в awh112, вам нужно сбросить позицию memoryStream.После copyTo, Position из memoryStream - это длина файла.По этой причине ваш код загрузит файл нулевого байта.Я подтвердил следующее:

fileStream.CopyTo(memoryStream);
Console.WriteLine(memoryStream.Position);
var response = await dbx.Files.UploadAsync(folder + "/" + filename, WriteMode.Overwrite.Instance, body: memoryStream);
Console.WriteLine((response as FileMetadata).Size);

Это печатает: (в моем случае мой тестовый файл имеет длину всего 12 байтов)

12
0

Вы можете перемотать его какthis:

fileStream.CopyTo(memoryStream);
Console.WriteLine(memoryStream.Position);
memoryStream.Position = 0;
Console.WriteLine(memoryStream.Position);
var response = await dbx.Files.UploadAsync(folder + "/" + filename, WriteMode.Overwrite.Instance, body: memoryStream);
Console.WriteLine((response as FileMetadata).Size);

Это печатает:

12
0
12

Полученный загруженный файл затем содержит ожидаемое содержимое.

...