Ik ben bezig met een applicatie voor het Windows Mobile Platform. Ik zit echter met een probleem. Ik moet namelijk een Jpeg naar een webserver (PHP). Hier kom ik echter niet uit. Zodra ik een HttpWebRequest aanmaakt die connectie maakt via de POST methode krijg ik geen resultaat. Een GET HttpWebRequest is geen probleem. Dit krijg ik namelijk wel voor elkaar. In de log op de webserver zie ik dan ook dat ik een GET request uitvoer. Maar zodra ik een POST request uitvoer, waarbij ik geen foutmelding krijg op mijn HTC, komt er niks in de log.
Ik heb echter op verschillende forums gezocht en de onderstaande code zou echt moeten werken. Misschien dat het toch aan de webserver ligt in plaats van de applicatie.
Dit is de code die ik heb gebruikt voor het verzenden van het POST HttpWebRequest.
In deze code heb ik een aantal Messageboxes gezet als debug. Ik kom tot en met de MessageBox met de melding "File naar server verstuurd". Echter kan ik dit niet terug vinden in de accesslog van de webserver.
Ik heb echter op verschillende forums gezocht en de onderstaande code zou echt moeten werken. Misschien dat het toch aan de webserver ligt in plaats van de applicatie.
Dit is de code die ik heb gebruikt voor het verzenden van het POST HttpWebRequest.
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
| public string uploadImage(string image) { Uri uri = new Uri("http://pieter.mybit.nl/uploader.php"); string boundary = "----------" + DateTime.Now.Ticks.ToString("x"); HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri); webrequest.ContentType = "multipart/form-data; boundary=" + boundary; webrequest.Method = "POST"; MessageBox.Show("Webrequest aangemaakt"); StringBuilder sb = new StringBuilder(); sb.Append("--"); sb.Append(boundary); sb.Append("\r\n"); sb.Append("Content-Disposition: form-data; name=\""); sb.Append("uploadfile"); sb.Append("\"; filename=\""); sb.Append(Path.GetFileName(image)); sb.Append("\""); sb.Append("\r\n"); sb.Append("Content-Type: "); sb.Append("image/pjpeg"); sb.Append("\r\n"); sb.Append("\r\n"); string postHeader = sb.ToString(); byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); MessageBox.Show("Header aangemaakt!"); // Build the trailing boundary string as a byte array // ensuring the boundary appears on a line by itself byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream = new FileStream(image, FileMode.Open, FileAccess.Read); long length = postHeaderBytes.Length + fileStream.Length + boundaryBytes.Length; webrequest.ContentLength = length; Stream requestStream = webrequest.GetRequestStream(); // Write out our post header requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); MessageBox.Show("Header naar de server vestuurd"); // Write out the file contents Thread.Sleep(1000); byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)fileStream.Length))]; int bytesRead = 0; while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) requestStream.Write(buffer, 0, bytesRead); MessageBox.Show("File naar de server verstuurd"); // Write out the trailing boundary Thread.Sleep(1000); requestStream.Write(boundaryBytes, 0, boundaryBytes.Length); MessageBox.Show("Boundary einde gestuurd naar de server"); WebResponse responce = webrequest.GetResponse(); Stream s = responce.GetResponseStream(); StreamReader sr = new StreamReader(s); MessageBox.Show("Respons van server gekregen"); return sr.ReadToEnd(); } |
In deze code heb ik een aantal Messageboxes gezet als debug. Ik kom tot en met de MessageBox met de melding "File naar server verstuurd". Echter kan ik dit niet terug vinden in de accesslog van de webserver.