在 c# 中使用 Dropbox API 读取大文件和块上传

本文关键字:文件 读取 API Dropbox | 更新日期: 2023-09-27 18:34:09

我有大量的SQL备份,我想将它们保存在Dropbox中,但由于我的服务器硬盘空间,我只想将副本发送到Dropbox并将文件移动到外部硬盘。

我正在尝试使用保管箱 API 的块上传,这是他们给出的示例代码。

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 周。最后我想问这个。

我如何制作此方法,以使用发送文件路径,并从该大文件进行块上传?

谢谢。

在 c# 中使用 Dropbox API 读取大文件和块上传

该示例使用随机字节。

注释random流的代码,并在using语句中包含您的文件流。 在localContentFullPath中包含带有文件名和扩展名的完整路径,并在 Dropbox 中分隔文件列表显示的filename

    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))
...