Compartilhar via


File.StartUpload método

Inicia uma nova sessão de carregamento de bloco e carrega o primeiro fragmento. O conteúdo do arquivo atual não é alterado quando este método é concluída. O método é idempotente (e, portanto, não altera o resultado), desde que você use os mesmos valores para uploadId e stream.

A sessão de carregamento termina quando você usar o método de CancelUpload(Guid) ou quando você tiver concluído a sessão de carregamento passando o restante do conteúdo do arquivo por meio dos métodos ContinueUpload(Guid, Int64, Stream) e FinishUpload(Guid, Int64, Stream) .

Por exemplo, você pode passar um arquivo de 35 MB, dividindo-la em três fluxos de 10 MB e um fluxo de 5 MB e carregando-las dessa maneira (usando os valores de deslocamento resultantes de 10, 20 e 30 MB):

StartUpload(GUID, stream1)
ContinueUpload(GUID, 10 MB, stream2)
ContinueUpload(GUID, 20 MB, stream3)
FinishUpload(GUID, 30 MB, stream4)

Os métodos StartUpload(Guid, Stream) e ContinueUpload(Guid, Int64, Stream) retornam o tamanho do total em execução de dados carregados em bytes, para que você pode passar esses valores de retorno para usos subsequentes ContinueUpload(Guid, Int64, Stream) e FinishUpload(Guid, Int64, Stream)

Namespace:  Microsoft.SharePoint.Client
Assemblies:   Microsoft.SharePoint.Client.Silverlight (em Microsoft.SharePoint.Client.Silverlight.dll);  Microsoft.SharePoint.Client.Phone (em Microsoft.SharePoint.Client.Phone.dll)  Microsoft.SharePoint.Client (em Microsoft.SharePoint.Client.dll)

Sintaxe

'Declaração
Public Function StartUpload ( _
    uploadId As Guid, _
    stream As Stream _
) As ClientResult(Of Long)
'Uso
Dim instance As File
Dim uploadId As Guid
Dim stream As Stream
Dim returnValue As ClientResult(Of Long)

returnValue = instance.StartUpload(uploadId, _
    stream)
public ClientResult<long> StartUpload(
    Guid uploadId,
    Stream stream
)

Parâmetros

  • stream
    Tipo: System.IO.Stream

    O fluxo que contém o primeiro fragmento de carregar.

Valor retornado

Tipo: Microsoft.SharePoint.Client.ClientResult<Int64>
O tamanho dos dados carregados em bytes.

Comentários

O exemplo a seguir mostra como substituir um arquivo existente usando os métodos StartUpload, ContinueUploade FinishUpload .

        protected void UploadFile(object sender, EventArgs e)
        {
            var spContext = SharePointContextProvider.Current.GetSharePointContext(Context);
            using (var clientContext = spContext.CreateUserClientContextForSPHost())
            {
                //Get file from Shared Documents library and overwrite it.
                var documentsFolder = clientContext.Web.GetFolderByServerRelativeUrl("/Shared Documents");
                Microsoft.SharePoint.Client.File uploadFile = documentsFolder.Files.GetByUrl("file name");
                clientContext.Load(uploadFile);
                clientContext.ExecuteQuery();
                
                //Fetch new version of file from resources. Write the file contents to a stream.
                var inputFile = Properties.Resources.<resource file>;
                var inputStream = new MemoryStream();
                inputStream.Write(inputFile, 0, inputFile.Length);
                inputStream.Position = 0;

                //Set up size of fragments to upload.
                int chunkSize = 1000000;
                int index = 0;

                Int64 offset = 0;
                var myGuid = Guid.NewGuid();

                List<byte[]> chunkList = new List<byte[]>();

                while ( inputStream.Position < inputStream.Length)
                {
                    byte[] buffer = new byte[chunkSize];
                    int chunkBytesRead = 0;
                    while (chunkBytesRead < chunkSize)
                    {
                        int bytesRead = inputStream.Read(buffer, chunkBytesRead, chunkSize - chunkBytesRead);
                        MemoryStream stream = new MemoryStream();
                        stream.Write(buffer, 0, buffer.Length);
                        if (bytesRead == 0)
                        {
                            break;
                        }
                        chunkBytesRead += bytesRead;
                        if (index == 0)
                        {
                            offset = uploadFile.StartUpload(myGuid, stream).Value;
                            clientContext.ExecuteQuery();
                        }
                        else if (inputStream.Position == inputStream.Length)
                        {
                            uploadFile.FinishUpload(myGuid, offset, stream);
                            clientContext.ExecuteQuery();
                        }
                        else
                        {
                            offset = uploadFile.ContinueUpload(myGuid, offset, stream).Value;
                            clientContext.ExecuteQuery();

                        }
                    }

                    index++;
                }               

            }
            
        }

Este método está disponível atualmente apenas em Office 365.

Ver também

Referência

File classe

File membros

Microsoft.SharePoint.Client namespace

Carregar o aplicativo de amostra de arquivos grandes para SharePoint