2010-08-27 30 views
0

所有運行完美但成本我最後nervia的東西是getstring部分.. 該函數是wonderfull,但我需要一種方法來尋找替代在GetString的問題.. 與GetString的(PIC,0,pic.length)我成爲了一個錯誤..而一籌莫展大THX的幫助需要幫助..圖片上傳功能的Windows Mobile 6淨CF 3.5

她代碼:

Public Function uploadPic(ByVal pic As Byte(), ByVal filename As String, ByVal user As String) 
    Dim encoding As String = "iso-8859-1" 
    'Erzeugen einer einzigartigen identifikation 
    Dim gui As String = Guid.NewGuid().ToString() 
    'Diese wird für den Header und den footer der Daten benötigt 
    Dim head As String = String.Format("--{0}", gui) 
    Dim foot As String = String.Format("--{0}--", gui) 
    'Einen Stringbuilder erstellen, in dem wir nun bequem die 
    'benötigten POST Daten speichern können 
    Dim contents As StringBuilder = New StringBuilder() 
    'Benutzerdaten schreiben (benutzername) 
    contents.AppendLine(head) 
    contents.AppendLine(String.Format("Content-Disposition: form-data; name=""{0}""", "username")) 
    contents.AppendLine() 
    contents.AppendLine(user) 
    'Header schreiben 
    contents.AppendLine(head) 
    'Bildinformationen schreiben, Bildkopf und die Binärdaten 
    Dim fileHeader As String = String.Format("Content-Disposition: file; name=""{0}""; filename=""{1}""", "media", user & ".jpg") 
    Dim fileData As String = System.Text.Encoding.GetEncoding(encoding).GetString(pic) 
    'Informationen zu dem Übergebenen Dateityp schreiben 
    contents.AppendLine(fileHeader) 
    contents.AppendLine(String.Format("Content-Type: {0}", "image/jpeg")) 
    contents.AppendLine() 
    contents.AppendLine(fileData) 
    'Durch schreiben des footers signalisieren dass keine Daten mehr kommen 
    contents.AppendLine(foot) 
    'MessageBox.Show(contents.ToString) 
    'Stream Reader zum lesen der Antwort von Twitpic 
    Dim reader As StreamReader 
    Dim result As String 
    Dim response As HttpWebResponse 
    'Einen Webrequest zu der TwitPic API erstellen 
    Dim request As HttpWebRequest = WebRequest.Create("http://urspacecity.de/uploadpic/up.php") 
    request.ContentType = String.Format("multipart/form-data; boundary={0}", gui) 
    request.Method = "POST" 
    'Die Daten die noch im Stringbuilder als String vorliegen 
    'in das byte (Binär)-Format umwandeln, damit die API diese annimt 
    Dim bytes As Byte() = System.Text.Encoding.GetEncoding(encoding).GetBytes(contents.ToString()) 
    request.ContentLength = bytes.Length 
    'Einen Stream aus dem WebRequest erstellen 
    Dim writer As Stream = request.GetRequestStream() 
    'Die Binären Daten in den Strom schreiben 
    writer.Write(bytes, 0, bytes.Length) 
    response = request.GetResponse() 
    reader = New StreamReader(response.GetResponseStream) 
    result = reader.ReadToEnd 
    reader.Close() 

    Return result 
End Function 

終於找到了解決方案 - 更改編碼:

Dim encoding As String = "iso-8859-2" 
+0

請指定收到的問題或異常。 – 2010-08-27 15:32:58

+0

用的GetString(PIC,0,pic.length)誤差是 PlatformNotSupportedException screenshoot: http://img101.imageshack.us/img101/6143/bild20100827174500.png 並用的GetString(PIC)見screenshoot : http://img148.imageshack.us/img148/2611/bild20100827174645.png 在PC上它運行完美,但在緊湊的框架3.5我找不到解決它的方法。 readallbytes問題是固定的,但現在我掛在這個概率上。 – 2010-08-27 15:49:07

+0

好吧,我現在有大眼睛..我看到一個關鍵字,並嘗試了ISO-8859-2 ..現在他在getstring沒有任何問題..但現在他停在響應= request.getresponse() - .-與錯誤: {「在寫入請求數據之前,無法檢索對此請求的響應。」} – 2010-08-27 16:18:57

回答

2

爲了解決「此請求的響應無法檢索到請求的數據已被寫入」的錯誤,你應該在調用request.GetResponse()之前關閉writer流,就像這樣:

writer.Write(bytes, 0, bytes.Length) 
writer.Close() 
response = request.GetResponse() 

您不必在.net的桌面版本中執行此操作,但您必須在.net精簡框架中。

我知道這是一個老問題,我的答案可能會被提問者忽略,但「請求數據寫入之前無法檢索到此請求的響應」谷歌搜索引導我回答這個問題。我希望它能幫助別人。