c# sharepoint http upload

c# - Carga de archivos a la biblioteca de documentos Sharepoint(WSS 3.0) utilizando HTTP PUT



upload (6)

Hola, tengo el siguiente fragmento de código para subir un archivo a Sharepoint. Utiliza HTTP PUT:

public static string UploadFile(string destUrl, string sourcePath) { try { Uri destUri = new Uri(destUrl); FileStream inStream = File.OpenRead(sourcePath); WebRequest req = WebRequest.Create(destUri); req.Method = "PUT"; req.Headers.Add("Overwrite", "F"); req.Timeout = System.Threading.Timeout.Infinite; req.Credentials = CredentialCache.DefaultCredentials; Stream outStream = req.GetRequestStream(); string status = CopyStream(inStream, outStream); if (status == "success") { outStream.Close(); WebResponse ores = req.GetResponse(); return "success"; } else { return status; } } catch (WebException we) { return we.Message; } catch (System.Exception ee) { return ee.Message; } }

Cuando ejecuto este código obtengo la excepción:

"El servidor remoto devolvió un error: (409) Conflicto".

¿Alguien tiene alguna idea de dónde me estoy equivocando?

Gracias,

Alex



¿Existe alguna razón particular por la que no puedas usar la API Sharepoint (por ejemplo, SPFolder.Files.Add) para subir el archivo? Como sigue:

http://msdn.microsoft.com/en-us/library/ms454491.aspx

public void UploadFile(string srcUrl, string destUrl) { if (! File.Exists(srcUrl)) { throw new ArgumentException(String.Format("{0} does not exist", srcUrl), "srcUrl"); } SPWeb site = new SPSite(destUrl).OpenWeb(); FileStream fStream = File.OpenRead(srcUrl); byte[] contents = new byte[fStream.Length]; fStream.Read(contents, 0, (int)fStream.Length); fStream.Close(); EnsureParentFolder(site, destUrl); site.Files.Add(destUrl, contents); }


Alex, esto también me pasó a mí. Es probable que deba crear otra biblioteca encendida o documentada y cargar archivos en ella para probarla.

Es posible que desee comprobar la variable "destUri" para ver si apunta exactamente a la lista esperada de sharepoints.

Mi situación es que primero creé una biblioteca de documentos "Necesidades", hay un error tipográfico, luego cambié el título a "Requisitos". Debería notar que sharepoint aún mantiene la URL a esta lista como http: // server: port / Requrements

Esta es una excepción. Espero que ayude


Tuve este problema cuando estaba haciendo referencia a la url de la biblioteca de documentos y no al archivo de destino en sí.

es decir, intente con http: // nombre del servidor / nombre de la biblioteca del documento / nuevo nombre de archivo.doc


Todavía no he resuelto mi problema, es por eso que estoy aquí, pero sé por qué estás recibiendo este error.

El error se produce porque no está configurando un campo oculto, pero obligatorio. En mi caso, no tenía columnas, y ciertamente ninguna requerida. Sin embargo, hay un campo de control de versiones que está en conflicto.

Mi intención es 1) cargar el documento, y 2) establecer los metadatos del documento. 1) y 2) ocurren en llamadas HTTP separadas. Idealmente, quiero hacer esto en una sola llamada, pero no sé cómo hacer esto.

Para lograr esto, 1) tiene éxito, por lo que el documento aparece en la biblioteca. Luego, cuando trato de actualizar los metadatos, es cuando recibo el error 409.

Estoy bastante seguro de que primero necesito insertar un paso entre 1) y 2) que primero descarga la lista del documento (o manifiesto) que en teoría contendría la información de control de versiones necesaria. Todo lo que tendría que hacer es establecer los campos de metadatos que necesito y enviar de vuelta al servidor.

No, no queremos usar la API Sharepoint porque no hay bibliotecas para ella en Java. ;-)


Tratar:

void StorePlainFile(string target_url, string filename, byte[] file_bytes) { string url = target_url + "/" + filename; System.Net.WebClient client = new System.Net.WebClient(); client.Credentials = System.Net.CredentialCache.DefaultCredentials; client.Headers.Add("Overwrite", "F"); byte[] response = client.UploadData(url, "PUT", file_bytes); }