<f{"id":193,"date":"2013-02-13T12:29:40","date_gmt":"2013-02-13T11:29:40","guid":{"rendered":"http:\/\/www.bernhard-krenz.de\/?p=193"},"modified":"2013-02-13T12:31:05","modified_gmt":"2013-02-13T11:31:05","slug":"dateiupload-mit-windows-phone-8","status":"publish","type":"post","link":"https:\/\/www.bernhard-krenz.de\/?p=193","title":{"rendered":"Dateiupload mit Windows-Phone 8"},"content":{"rendered":"<p>Wer versuch mit der API von Windows-Phone (7, 7.5, 8) eine Datei auf einem Webserver hochzuladen, wird schnell merken, dass die einfach zu nutzende WebClient-Klasse hierf\u00fcr keine Funktionen zur Verf\u00fcgung stellt.<\/p>\n<p>Wer keine Lust hat in den Tiefen des HttpWebRequest zu irren, der nutzt dazu am Besten vorhandene Bibliotheken der Community. Ein Dateiupload l\u00e4sst sich zum Beispiel mit <a href=\"http:\/\/restsharp.org\/\" target=\"_blank\">RestSharp<\/a> realisieren.<\/p>\n<p>In meinem Beispiel will ich eine Datei aus einem bestimmten Verzeichnis des IsolatedStorage hochladen.<\/p>\n<p>Schritt 1: Ermittlung des Dateipfades<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nvar directoryName = &quot;FilesToUpload&quot;;\r\n\r\nstring[] files = null;\r\n\r\n\/\/ get all files from the isolatedstorage in the specified directory\r\nusing (var storage = IsolatedStorageFile.GetUserStoreForApplication())\r\n{\r\n\t\/\/ if the directory does not exists, there is nothing to do\r\n\tif (!storage.DirectoryExists(directoryName))\r\n\t{\r\n\t\treturn;\r\n\t}\r\n\r\n\tfiles = storage.GetFileNames(Path.Combine(directoryName, &quot;*.xml&quot;));\r\n}\r\n\r\n\/\/ if there is no file present in the directory,\r\n\/\/ there is nothing to do either\r\nif (files == null || files.Length == 0)\r\n{\r\n\treturn;\r\n}\r\n\r\n\/\/ use the first file for upload\r\nvar filePath = Path.Combine(directoryName, files[0]);\r\n<\/pre>\n<p>Schritt 2: Formulierung des Webrequests<\/p>\n<p><!--more--><\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nvar client = new RestClient(&quot;http:\/\/www.uploadurl.de&quot;);\r\nvar request = new RestRequest(Method.POST);\r\nrequest.AddFile(&quot;upload&quot;, ReadFile(filePath), Path.GetFileName(filePath));\r\n\r\nclient.ExecuteAsync(request, response =&gt;\r\n{\r\n\t\/\/ custom code, after upload did finish\r\n});\r\n<\/pre>\n<p>Schritt 3: Datei f\u00fcr den Upload als byte-array lesen<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nprivate byte[] ReadFile(string filePath)\r\n{\r\n\tvar bytes = new List&lt;byte&gt;();\r\n\r\n\tusing (var storage = IsolatedStorageFile.GetUserStoreForApplication())\r\n\t{\r\n\t\tusing (var stream = storage.OpenFile(_currentFeedbackFilePath, FileMode.Open, FileAccess.Read))\r\n\t\t{\r\n\t\t\tbyte[] buffer = new byte[1024];\r\n\t\t\tvar offset = 0;\r\n\t\t\tvar readBytes = 0;\r\n\t\t\tdo\r\n\t\t\t{\r\n\t\t\t\treadBytes = stream.Read(buffer, offset, buffer.Length);\r\n\r\n\t\t\t\tif (readBytes &gt; 0)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (readBytes == buffer.Length)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tbytes.AddRange(buffer);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar writtenBytes = new byte[readBytes];\r\n\t\t\t\t\t\tArray.Copy(buffer, writtenBytes, readBytes);\r\n\r\n\t\t\t\t\t\tbytes.AddRange(writtenBytes);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t} while (readBytes == buffer.Length);\r\n\t\t}\r\n\t}\r\n\r\n\treturn bytes.ToArray();\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Wer versuch mit der API von Windows-Phone (7, 7.5, 8) eine Datei auf einem Webserver hochzuladen, wird schnell merken, dass<a href=\"https:\/\/www.bernhard-krenz.de\/?p=193\" class=\"searchmore\">Weiterlesen&hellip;<\/a><\/p>\n<div class=\"clr\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[13],"_links":{"self":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/193"}],"collection":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=193"}],"version-history":[{"count":9,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/193\/revisions"}],"predecessor-version":[{"id":202,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=\/wp\/v2\/posts\/193\/revisions\/202"}],"wp:attachment":[{"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=193"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=193"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bernhard-krenz.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=193"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}