Нужна помощь .. Функция загрузки изображений для Windows Mobile 6 Net CF 3,5 - PullRequest
0 голосов
/ 27 августа 2010

все работает отлично, но то, что стоило мне моих последних нервов, это часть gettring ... эта функция замечательна, но мне нужен способ найти альтернативу для проблемы gettring ... с помощью gettring (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"

1 Ответ

2 голосов
/ 28 ноября 2013

Чтобы решить, что «ответ на этот запрос не может быть получен до тех пор, пока данные запроса не будут записаны», вы должны закрыть поток writer перед вызовом request.GetResponse(), например:

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

Youне нужно делать это в настольной версии .net, но нужно в .net compact framework.

Я знаю, что это старый вопрос, и мой ответ скорее всего будет проигнорирован Аскером, но "ответэтот запрос не может быть получен до тех пор, пока данные запроса не будут записаны "поиск Google направил меня на этот вопрос.Надеюсь, это кому-нибудь поможет.

...