Upload archivos grandes con los SDK Graph Microsoft

Varias entidades de Microsoft admiten Graph archivos reanudables para facilitar la carga de archivos grandes. En lugar de intentar cargar todo el archivo en una sola solicitud, el archivo se segmenta en partes más pequeñas y se usa una solicitud para cargar un solo segmento. Para simplificar este proceso, los SDK de Microsoft Graph implementan una tarea de carga de archivos grande que administra la carga de los segmentos.

Upload archivo grande a OneDrive

using (var fileStream = System.IO.File.OpenRead(filePath))
{
    // Use properties to specify the conflict behavior
    // in this case, replace
    var uploadProps = new DriveItemUploadableProperties
    {
        ODataType = null,
        AdditionalData = new Dictionary<string, object>
        {
            { "@microsoft.graph.conflictBehavior", "replace" }
        }
    };

    // Create the upload session
    // itemPath does not need to be a path to an existing item
    var uploadSession = await graphClient.Me.Drive.Root
        .ItemWithPath(itemPath)
        .CreateUploadSession(uploadProps)
        .Request()
        .PostAsync();

    // Max slice size must be a multiple of 320 KiB
    int maxSliceSize = 320 * 1024;
    var fileUploadTask =
        new LargeFileUploadTask<DriveItem>(uploadSession, fileStream, maxSliceSize);

    // Create a callback that is invoked after each slice is uploaded
    IProgress<long> progress = new Progress<long>(prog => {
        Console.WriteLine($"Uploaded {prog} bytes of {fileStream.Length} bytes");
    });

    try
    {
        // Upload the file
        var uploadResult = await fileUploadTask.UploadAsync(progress);

        if (uploadResult.UploadSucceeded)
        {
            // The ItemResponse object in the result represents the
            // created item.
            Console.WriteLine($"Upload complete, item ID: {uploadResult.ItemResponse.Id}");
        }
        else
        {
            Console.WriteLine("Upload failed");
        }
    }
    catch (ServiceException ex)
    {
        Console.WriteLine($"Error uploading: {ex.ToString()}");
    }
}

Reanudación de una carga de archivos

Los SDK Graph Microsoft admiten la reanudación decargas en curso . Si la aplicación encuentra una interrupción de conexión o un estado HTTP de 5.x.x durante la carga, puede reanudar la carga.

fileUploadTask.ResumeAsync(progress);

Upload datos adjuntos grandes para Outlook mensaje

// TODO