简体   繁体   中英

Upload zipped file to Dropbox using C#

I am trying to upload a zipped file to Dropbox using access token. Below code works for unzipped file :

private static async Task FileUploadToDropbox(string filePath, string fileName, byte[] fileContent)
{
    var client = new DropboxClient("Access Token");

    const int chunkSize = 1024;

    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++)
        {
            var byteRead = stream.Read(buffer, 0, chunkSize);

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

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

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

                    else
                    {
                        await client.Files.UploadSessionAppendV2Async(cursor, body: memStream);
                    }
                }
            }
        }
    }
}

But when I try to upload a zipped file using this code, it uploads an empty zipped file to Dropbox. I am reading the zipped file as a byte array and passing it to the above method. Although the file size remains the same, when i download the file and try to extract it, it says that the zipped file is empty.

Please try this:

    /// <summary>
    /// Function to import local file to dropbox.
    /// </summary>
    public static async Task<bool> WriteFileToDropBox()
    {
        try
        {
            //Connecting with dropbox.
            var file = "File path at dropbox";
            using (var dbx = new DropboxClient("Access Token"))
            using (var fs = new FileStream("Path of file to be uploaded.")
            {
                var updated = await dbx.Files.UploadAsync(file, WriteMode.Add.Instance, body: fs);
            }
            return true;
        }
        catch (Exception err)
        {
            MessageBox.Show(err.Message);
            return false;
        }
    }
private static async Task FileUploadToDropbox(string filePath, string fileName, string fileSource)
        {
            using (var dbx = new DropboxClient("access Token"))
            using (var fs = new FileStream(fileSource, FileMode.Open, FileAccess.Read))
            {
                var updated = await dbx.Files.UploadAsync(
                    (filePath + "/" + fileName), WriteMode.Overwrite.Instance, body: fs);
            }
        }

Above method worked for me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM