solo - sincronizar sharepoint pc
Cargue un archivo a SharePoint a través de los servicios web integrados (7)
De un colega en el trabajo:
Lazy way: la interfaz del sistema de archivos de Windows WebDAV. Es malo como una solución programática porque depende del servicio WindowsClient que se ejecuta en su sistema operativo, y también solo funciona en sitios web que se ejecutan en el puerto 80. Asigne una unidad a la biblioteca de documentos y obtenga la copia del archivo.
También hay un servicio web para subir archivos, doloroso pero funciona todo el tiempo.
Creo que puede cargar archivos a través de la API de FrontPage, pero no conozco a nadie que realmente lo use.
¿Cuál es la mejor manera de subir un archivo a una Biblioteca de documentos en un servidor de SharePoint a través de los servicios web integrados que expone la versión de WSS 3.0?
Siguiendo las dos respuestas iniciales ...
Definitivamente necesitamos usar la capa de servicio web ya que realizaremos estas llamadas desde aplicaciones cliente remotas.
El método WebDAV nos funcionaría, pero preferiríamos ser consistentes con el método de integración del servicio web.
También hay un servicio web para subir archivos, doloroso pero funciona todo el tiempo.
¿Te refieres al servicio "Copiar"? Hemos tenido éxito con el método CopyIntoItems
este servicio. ¿Esta sería la forma recomendada de subir un archivo a las bibliotecas de documentos utilizando solo la API del servicio web de WSS?
He publicado nuestro código como una respuesta sugerida.
Ejemplo de uso del servicio web "Copiar" de WSS para cargar un documento en una biblioteca ...
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)
{
// ...
}
}
Hay un par de cosas a considerar:
- Copy.CopyIntoItems
necesita que el documento ya esté presente en algún servidor. El documento se pasa como un parámetro de la llamada al servicio web, que limitará el tamaño del documento. (Consulte http://social.msdn.microsoft.com/Forums/en-AU/sharepointdevelopment/thread/e4e00092-b312-4d4c-a0d2-1cfc2beb9a6c ) - el método ''http put'' (es decir, webdav ...) solo colocará el documento en la biblioteca, pero no establecerá los valores de campo
- para actualizar los valores de campo, puede llamar a Lists.UpdateListItem después del ''http put''
- las bibliotecas de documentos pueden tener directorios, puede hacerlos con ''http mkcol''
- es posible que desee verificar los archivos con Lists.CheckInFile
- también puede crear un servicio web personalizado que use la API SPxxx .Net, pero ese nuevo servicio web deberá instalarse en el servidor. Podría ahorrar viajes al servidor.
He tenido suerte usando la clase de contenedor DocLibHelper que se describe aquí: http://geek.hubkey.com/2007/10/upload-file-to-sharepoint-document.html
No estoy seguro de exactamente qué servicio web utilizar, pero si se encuentra en una posición en la que puede usar las DLL Dlls de .NET de SharePoint, entonces usar SPList y SPLibrary.Items.Add es realmente fácil.
Otra opción es usar el simple OL ''HTTP PUT:
WebClient webclient = new WebClient();
webclient.Credentials = new NetworkCredential(_userName, _password, _domain);
webclient.UploadFile(remoteFileURL, "PUT", FilePath);
webclient.Dispose();
Donde remoteFileURL apunta a su biblioteca de documentos de SharePoint ...
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: Al cambiar el primer parámetro de CopyIntoItems
al nombre del archivo, Path.GetFileName(destinationUrl)
, el mensaje de desvinculación desaparece.