Meine Frage zum Hochladen einzelner lokalen Datei auf Owncloud via Restsharp C#

client-development
webserver_issue

#1

Guten Abend, alle

Ich lerne gerade Cloud-Entwicklung und versuche gerade ein kleines Programm, mit dem eine lokale Datei (wie z.B. file.docx) von Windows auf einen anderen Remote Rechner (Ubuntu 16.04), in dem ein Owncloud Server läuft, zu übertragen (bzw. hoch zu laden), zu schreiben.

Entwicklungsumgebung unter Windows: Visual Studio 2015, open source: RestSharp.

Mein Problem ist dass die Datei trotz dem Aufruf der entsprechenden Funktion zur Übertragung über URL nicht auf dem Server bzw Owncloud online-Verzeichnis zu finden ist, es liefert mir auch keine Fehlermeldung.

Mein Code sieht wie folgendes aus:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using RestSharp;
using RestSharp.Extensions.MonoHttp;
using RestSharp.Authenticators;
using RestSharp.Extensions; 
using System.IO;
using System.Net;
using System.Globalization;
namespace myOwncloudProj
{
class Program
{
    static void Main(string[] args)
    {

        try {

          var client = new RestClient();
          string cloudUsr = "user";
          string cloudPw = "pw";

          string pathToSave = @"D:\path\to\files\";

          client.BaseUrl = new Uri("http://192.168.xxx.xxx/owncloud/remote.php/webdav/");
          client.Authenticator = new HttpBasicAuthenticator(cloudUsr, cloudPw);

          UploadToCloud(client, "tmp.docx", pathToSave);

      }
      catch (FileNotFoundException ex)
      {
        Console.WriteLine(ex.Message);
      }
      // Verzeichnis existiert nicht
      catch (DirectoryNotFoundException ex)
      {
        Console.WriteLine(ex.Message);
      }
      catch (WebException webExcp)
      {
        // If you reach this point, an exception has been caught.
        Console.WriteLine("A WebException has been caught.");
        // Write out the WebException message.
        Console.WriteLine(webExcp.ToString());
        // Get the WebException status code.
        WebExceptionStatus status = webExcp.Status;
        // If status is WebExceptionStatus.ProtocolError, 
        //   there has been a protocol error and a WebResponse 
        //   should exist. Display the protocol error.
        if (status == WebExceptionStatus.ProtocolError)
        {
            Console.Write("The server returned protocol error ");
            // Get HttpWebResponse so that you can check the HTTP status code.
            HttpWebResponse httpResponse = (HttpWebResponse)webExcp.Response;
            Console.WriteLine((int)httpResponse.StatusCode + " - "
               + httpResponse.StatusCode);
        }
      }
      catch (Exception e_cld)
      {
        Console.WriteLine("An error occurred: '{0}'", e_cld);
      }
      Console.ReadLine();
  }

  //Upload file to owncloud server
  public static void UploadToCloud(RestClient ocClient, string fileName, string ocLocal)
  {
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

    //Check if the file exists on PC
    string localFile = ocLocal + fileName;
    if (File.Exists(localFile) == true)
    {
        Console.WriteLine("local file exits on pc. \n");

        //Check if the file exits on server *********

        //Or upload it directlly
        var requestUpLoad = new RestRequest("/", Method.POST);
        requestUpLoad.AddHeader("Content-Type", "application/octet-stream");

        byte[] dataToUpload = File.ReadAllBytes(localFile);
        requestUpLoad.AddFile("tmpFile", dataToUpload, "tmp.docx");
        Console.WriteLine("Size of file to upload: " + dataToUpload.Length.ToString() + "\n");

        //ocClient.Execute(requestUpLoad);

        var cloudResponse = ocClient.Execute(requestUpLoad);
        Console.WriteLine("Resp: " + cloudResponse.ContentType + "\n");
        Console.WriteLine("Content: " + cloudResponse.Content + "\n");

        Console.WriteLine("Upload has been finished. \n");

    }
    else
    {
        Console.WriteLine("\n" + fileName + " is not found on pc. \n");
    }
  }

} }

Kann mir jemand dabei weiter helfen bzw. ein funktionierendes Beispiel geben?

Vielen Dank im Voraus!

Viele Grüße! David


#2

Hi David,

ownCloud nutzt WebDAV als Protokol für den Upload von Dateien.
Nutze bitte eine WebDAV Library - z.b. https://github.com/saguiitay/WebDAVClient

Gruß,

Tom


#3

Danke für deine Antwort!

Ich habe das Problem inzwischen schon gelöst.

VG,

David