Чтение больших файлов и загрузка фрагментов с помощью Dropbox Api в С#

У меня есть большие резервные копии sql, и я хочу сохранить их в Dropbox, но я просто хочу отправить копию в Dropbox и переместить файл на внешний жесткий диск из-за места на жестком диске моего сервера.

Я пытаюсь использовать загрузку фрагментов API Dropbox, и вот пример кода, который они дают.

private async Task ChunkUpload(DropboxClient client, string folder, string fileName)
    {
        Console.WriteLine("Chunk upload file...");
        // Chunk size is 128KB.
        const int chunkSize = 128 * 1024;

        // Create a random file of 1MB in size.
        var fileContent = new byte[1024 * 1024];        
        new Random().NextBytes(fileContent);

        using (var stream = new MemoryStream(fileContent))
        {
            int numChunks = (int)Math.Ceiling((double)stream.Length / chunkSize);

            byte[] buffer = new byte[chunkSize];
            string sessionId = null;

            for (var idx = 0; idx < numChunks; idx++)
            {
                Console.WriteLine("Start uploading chunk {0}", idx);
                var byteRead = stream.Read(buffer, 0, chunkSize);

                using (MemoryStream memStream = new MemoryStream(buffer, 0, byteRead))
                {
                    if (idx == 0)
                    {
                        var result = await client.Files.UploadSessionStartAsync(memStream);
                        sessionId = result.SessionId;
                    }

                    else
                    {
                        UploadSessionCursor cursor = new UploadSessionCursor(sessionId, (ulong)(chunkSize * idx));

                        if (idx == numChunks - 1)
                        {
                            await client.Files.UploadSessionFinishAsync(cursor, new CommitInfo(folder + "/" + fileName), memStream);
                        }

                        else
                        {
                            await client.Files.UploadSessionAppendAsync(cursor, memStream);
                        }
                    }
                }
            }
        }
    }

У меня есть пути к файлам, я хочу загружать свои большие файлы по частям, но просто не смог заставить этот пример кода работать с отправкой пути к файлу. Мои модификации для чтения чанков не сработали, гуглил 2 недели. Наконец-то я хотел спросить об этом.

Как я могу заставить этот метод работать с путем отправки файла и сделать загрузку фрагмента из этого большого файла?

Спасибо с этого момента.


person ahmet kocadogan    schedule 10.02.2016    source источник


Ответы (1)


В примере используются случайные байты.

Прокомментируйте коды для потока random и включите в оператор using свой файловый поток. Включите полный путь с именем файла и расширением в localContentFullPath и отделите filename для отображения списка файлов в DropBox.

    public async Task ChunkUpload(DropboxClient client, string folder, string localContentFullPath)
    {
        Console.WriteLine("Chunk upload file...");
        // Chunk size is 128KB.
        const int chunkSize = 128 * 1024;

        // Create a random file of 1MB in size.
        // var fileContent = new byte[1024 * 1024];
        // new Random().NextBytes(fileContent);

        //using (var stream = new MemoryStream(fileContent))

        var filename = System.IO.Path.GetFileName(localContentFullPath.ToString());
        using (var stream = new FileStream(localContentFullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
...
person marlo    schedule 18.02.2016
comment
@Marlo, не могли бы вы сказать мне, что я могу использовать после использования, и папка указывает имя папки Dropbox. это мой код.. использование (var stream = new FileStream(content, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { var updated = await dbx.Files.UploadAsync(/ + папка +/+ файл, WriteMode. Overwrite.Instance, тело: поток); } - person Dutt93; 11.05.2017