簡體   English   中英

需要幫助.. Windows Mobile 6 net cf 3.5的圖片上傳器功能

[英]Need Help.. Picture uploader function for windows mobile 6 net cf 3.5

一切運行完美,但是讓我最后一個神經衰弱的是getstring部分..該功能很棒,但是我需要一種方法來找到getstring問題的替代方法..使用getstring(pic,0,pic.length)我成了一個錯誤..並沒有辦法尋求幫助

她的代碼:

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"

要解決“在寫入請求數據之前無法檢索此請求的響應”錯誤,您應在調用request.GetResponse()之前關閉writer流,如下所示:

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

您不必在.net桌面版本中執行此操作,但必須在.net Compact Framework中執行此操作。

我知道這是一個古老的問題,我的答案很可能會被問問者忽略,但“在寫入請求數據之前,無法檢索到此請求的響應”,谷歌搜索將我引導至此問題。 希望對您有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM