Fazer o Upload de um arquivo para o SharePoint através do built-in web services

StackOverflow https://stackoverflow.com/questions/31868

  •  09-06-2019
  •  | 
  •  

Pergunta

Qual é a melhor maneira de fazer upload de um arquivo para uma Biblioteca de Documentos em um servidor do SharePoint através do built-in web services versão do WSS 3.0 expõe?

A seguir as duas respostas iniciais...

  • Nós definitivamente precisamos de usar a camada de Serviços Web como nós vamos estar fazendo estas chamadas de aplicações cliente remoto.

  • O WebDAV, um método de trabalho para nós, mas nós preferimos que seja consistente com o web service método de integração.

Além disso, há um serviço da web para fazer o upload de arquivos, doloroso, mas trabalha todo o tempo.

Você está se referindo a uma "Cópia" do serviço?Temos sido bem-sucedidos com este serviço CopyIntoItems o método.Seria essa a maneira recomendada para fazer o upload de um arquivo para Bibliotecas de Documentos usando apenas o WSS API de serviço da web?

Eu ter postado o nosso código como uma resposta sugerida.

Foi útil?

Solução

Exemplo de uso do WSS "Copiar" serviço da Web para carregar um documento em uma biblioteca de...

public static void UploadFile2007(string destinationUrl, byte[] fileData)
{
    // List of desination Urls, Just one in this example.
    string[] destinationUrls = { Uri.EscapeUriString(destinationUrl) };

    // Empty Field Information. This can be populated but not for this example.
    SharePoint2007CopyService.FieldInformation information = new 
        SharePoint2007CopyService.FieldInformation();
    SharePoint2007CopyService.FieldInformation[] info = { information };

    // To receive the result Xml.
    SharePoint2007CopyService.CopyResult[] result;

    // Create the Copy web service instance configured from the web.config file.
    SharePoint2007CopyService.CopySoapClient
    CopyService2007 = new CopySoapClient("CopySoap");
    CopyService2007.ClientCredentials.Windows.ClientCredential = 
        CredentialCache.DefaultNetworkCredentials;
    CopyService2007.ClientCredentials.Windows.AllowedImpersonationLevel = 
        System.Security.Principal.TokenImpersonationLevel.Delegation;

    CopyService2007.CopyIntoItems(destinationUrl, destinationUrls, info, fileData, out result);

    if (result[0].ErrorCode != SharePoint2007CopyService.CopyErrorCode.Success)
    {
        // ...
    }
}

Outras dicas

Outra opção é o uso simples ol' HTTP COLOCAR:

WebClient webclient = new WebClient();
webclient.Credentials = new NetworkCredential(_userName, _password, _domain);
webclient.UploadFile(remoteFileURL, "PUT", FilePath);
webclient.Dispose();

Onde remoteFileURL pontos para a sua biblioteca de documentos do SharePoint...

Há um par de coisas a considerar:

  • Copiar.CopyIntoItems precisa o documento já estar presente em algum servidor.O documento é passado como um parâmetro do webservice chamada, o que limitará o quão grande é o documento pode ser.(Ver http://social.msdn.microsoft.com/Forums/en-AU/sharepointdevelopment/thread/e4e00092-b312-4d4c-a0d2-1cfc2beb9a6c)
  • o 'http put' método (ou seja, webdav...) só colocar o documento na biblioteca, mas não definir valores de campo
  • a atualização de valores de campo que você pode chamar de Listas.UpdateListItem após o "http put'
  • bibliotecas de documentos pode ter diretórios, você pode fazê-los com 'http mkcol'
  • você pode querer verificar em arquivos com Listas.CheckInFile
  • você também pode criar um webservice personalizado que usa o SPxxx .A API de rede, mas que o novo webservice vai ter que ser instalado no servidor.Ele poderia salvar viagens para o servidor.
public static void UploadFile(byte[] fileData) {
  var copy = new Copy {
    Url = "http://servername/sitename/_vti_bin/copy.asmx", 
    UseDefaultCredentials = true
  };

  string destinationUrl = "http://servername/sitename/doclibrary/filename";
  string[] destinationUrls = {destinationUrl};

  var info1 = new FieldInformation
                {
                  DisplayName = "Title", 
                  InternalName = "Title", 
                  Type = FieldType.Text, 
                  Value = "New Title"
                };

  FieldInformation[] info = {info1};
  var copyResult = new CopyResult();
  CopyResult[] copyResults = {copyResult};

  copy.CopyIntoItems(
    destinationUrl, destinationUrls, info, fileData, out copyResults);
}

NOTA: Alterar o 1º parâmetro de CopyIntoItems para o nome do arquivo, Path.GetFileName(destinationUrl), faz com que a desvincular a mensagem desaparecer.

Eu tive sorte com o DocLibHelper classe de wrapper descrito aqui: http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html

A partir de um colleage no trabalho:

Preguiçoso forma:o WebDAV do Windows sistema de arquivos de interface.Ele é mau como uma solução programática porque depende WindowsClient serviço em execução no seu sistema operacional, e também só funciona em sites executado na porta 80.Mapear uma unidade para a biblioteca de documentos e ficar com a cópia de arquivo.

Além disso, há um serviço da web para fazer o upload de arquivos, doloroso, mas trabalha todo o tempo.

Eu acredito que você é capaz de fazer upload de arquivos através do FrontPage API, mas eu não sei de quem realmente usa-lo.

Não tenho certeza sobre exatamente qual o serviço da web para usar, mas se você estiver em uma posição onde você pode usar o SharePoint .A API de rede Dlls, em seguida, usando o SPList e SPLibrary.Itens.Adicionar é muito fácil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top