2010-08-27 6 views
0

tout fonctionne parfaitement, mais la chose qui m'a coûté mes derniers nerfs est la partie getstring .. cette fonction est magnifique mais j'ai besoin d'un moyen de trouver une alternative pour le problème getString .. avec getString (pic, 0, pic.length) i est devenu une erreur .. et trouver aucune issue grande thx pour l'aideBesoin d'aide .. Image Uploader fonction pour Windows Mobile 6 net cf 3.5

sien le code:

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 

a finalement trouvé la solution - changer le codage:

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

Veuillez spécifier le problème ou l'exception reçue. –

+0

l'erreur avec getString (pic, 0, pic.length) est PlatformNotSupportedException screenshoot: http://img101.imageshack.us/img101/6143/bild20100827174500.png et avec getString (pic) voir screenshoot : http://img148.imageshack.us/img148/2611/bild20100827174645.png Sur PC, il fonctionne parfaitement mais sur un châssis compact 3.5 je n'ai trouvé aucun moyen de le réparer. le problème de readallbytes est fixé mais maintenant je me bloque sur ce problème. –

+0

ok maintenant j'ai de grands yeux .. j'ai vu un articel et j'ai essayé le iso-8859-2 .. maintenant il ne fait aucun problème au getstring .. mais maintenant il s'arrête à response = request.getresponse() -.- avec erreur : {"La réponse à cette requête ne peut pas être récupérée avant que les données de la demande aient été écrites."} –

Répondre

2

Pour résoudre « la réponse à cette demande ne peut être récupéré jusqu'à ce que les données de demande a été écrit » erreur, vous devez fermer le flux writer avant d'appeler request.GetResponse(), comme ceci:

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

Vous n'avez pas faites ceci dans la version de bureau de .net mais vous devez dans le cadre compact de .net.

Je sais que c'est une vieille question, et ma réponse est probablement ignorée par asker mais "la réponse pour cette requête ne peut être récupérée jusqu'à ce que les données de requête soient écrites" google search m'a dirigé vers cette question. J'espère que ça aide quelqu'un.

Questions connexes