Chargement de fichiers dans la bibliothèque Sharepoint (WSS 3.0) en utilisant HTTP PUT
Salut j'ai le code suivant pour télécharger un fichier vers Sharepoint. Il utilise 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;
}
}
quand j'exécute ce code j'obtiens l'exception:
"Le serveur distant a retourné une erreur: (409) Conflit."
quelqu'un a une idée d'où je vais mal?
Merci,
Alex
6 réponses
j'ai eu ce problème quand je faisais référence à l'url de la bibliothèque de document et pas le fichier de destination lui-même.
c'est à dire essayer de http://server nom/document nom de la bibliothèque/nouveau nom de fichier.doc
aucune idée. Mais pourquoi n'utilisez-vous pas les appels de procédure à distance (RPC)?
j'ai trouvé cet exemple qui pourrait vous aider à démarrer http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html
, Essayez:
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);
}
je n'ai pas résolu mon problème, c'est pourquoi je suis ici, mais je sais pourquoi vous obtenez cette erreur.
l'erreur résulte du fait que vous ne définissez pas un champ caché, mais requis. Dans mon cas, je n'avais pas de colonnes, et certainement aucun qui étaient nécessaires. Cependant, il y a un domaine de versioning qui est en conflit.
Mon intention est de 1) télécharger le document, et 2) définir les métadonnées du document. 1) et 2) se produisent sur des appels HTTP séparés. Idéalement, Je veux le faire en un seul appel, mais je ne sais pas comment faire.
pour accomplir ceci, 1) réussit, ainsi le document apparaît dans la bibliothèque. Puis quand j'essaie de mettre à jour les métadonnées, c'est là que j'obtiens l'erreur 409.
je suis assez sûr que j'ai d'abord besoin d'insérer une étape entre 1) et 2) qui télécharge d'abord la liste du document (ou manifeste) qui, en théorie, contiendrait les informations de version nécessaires. Tous j'aurais besoin de faire est de mettre les champs de métadonnées dont j'ai besoin, et les renvoyer au serveur.
Non, Nous ne voulons pas utiliser L'API Sharepoint car il n'y a pas de bibliothèques pour cela en Java. ;- )
y a-t-il une raison paticulaire pour laquelle vous ne pouvez pas simplement utiliser L'API Sharepoint (par ex. SPFolder.Fichier.Ajouter) pour télécharger le fichier? Comme suit:
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, Ce qui est arrivé à moi aussi. Vous devriez probablement créer un autre lit ou une autre bibliothèque de documents et télécharger des fichiers dans elle pour tester.
vous pouvez vérifier la variable" destUri " pour voir si elle pointe exactement sur la liste attendue sharepoint.
Ma situation est que j'ai d'abord créé une bibliothèque de documents" Requrements", il y a une erreur typographique, puis j'ai changé le titre en"Requirements". Vous devriez noter que sharepoint garde toujours L'URL à cette liste comme http://server:port/Requrements
c'est une exception. Espérons que cela aide.