Fazer o Upload de um arquivo para o SharePoint através do built-in web services
-
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.
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.