[ASP.NET] HTTP HttpWebRequest Fileupload

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Rednas_N
  • Registratie: September 2010
  • Laatst online: 12:22
Beste Tweakers,

Ik ben nu al een geruime tijd bezig met HTTPWebRequest, op zich best interessant. Gewoon stukjes tekst versturen via zo'n request is in principe geen probleem. Ik wil graag een een bestand uploaden via een HTTPWebRequest.

Ik probeer dit op dit moment te doen door de byte array te converteren naar een string, en bij het afhandelen van de request word deze string weer geconverteerd naar een byte array. Op zich vrij logisch denk ik. Maar op één of andere manier krijg ik constant corrupte bestanden eruit.

Voordat ik de request maak word eerst alle informatie van de 'fileupload' in een XML structuur gezet, en vervolgens wordt de request gedaan. Bij het afhandelen haal via de XML structuur de content eruit.

Op het moment dat ik het weer ga decoden, dus van String naar een Byte array raakt het bestand volgens mij corrupt.

Heeft één van jullie toevallig een oplossing om zonder dat het bestand corrupt raakt een HTTPWebRequest te doen? Ik werk in ASP.NET / C#.

Wat misschien ook wel handig is om te weten bij de request worden er ook nog 2 stukken tekst meegestuurd. Dus een bestand, tekst en nog een tekst.

Ik probeer trouwens op deze manier van een string naar bytes te gaan;

(dit is een voorbeeld)

code:
1
2
byte[] b = new byte[100];
string s = System.Text.Encoding.ASCII.GetString(b);


Voor zover ik weet gaat het verkeerd bij het encoden en decoden. Hoe kan ik een byte array naar een string converteren/encoden en andersom? Of, wat kan ik hier het beste voor gebruiken!?

Kleine edit;

Ik hoop dat ik iets gevonden heb, hoop dat het werkt.
code:
1
2
string base64 = Convert.ToBase64String(bytes);
byte[] bytes = Convert.FromBase64String(base64);


Als ik wat weet zal ik het hier neerzetten uiteraard.

[ Voor 13% gewijzigd door Rednas_N op 07-12-2011 18:08 ]

Just do it.


Acties:
  • 0 Henk 'm!

  • keesdewit
  • Registratie: December 2003
  • Laatst online: 19-06 20:46
Je kunt de byte array van het bestand inderdaad omzetten naar een base64 string.

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Public Function FileToBASE64(ByVal strPath As String) As String
    Using objStream As New IO.FileStream(strPath, IO.FileMode.Open)
        Dim buffer(objStream.Length - 1) As Byte
        objStream.Read(buffer, 0, buffer.Length)
        objStream.Close()
        Return Convert.ToBase64String(buffer)
    End Using
End Function

Public Sub BASE64ToFile(ByVal strPath As String, ByVal strBASE64 As String)
    Using objStream As New IO.FileStream(strPath, IO.FileMode.Create)
        Dim buffer As Byte() = Convert.FromBase64String(strBASE64)
        objStream.Write(buffer, 0, buffer.Length)
        objStream.Close()
    End Using
End Sub


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public string FileToBASE64(string strPath)
{
    using (IO.FileStream objStream = new IO.FileStream(strPath, IO.FileMode.Open)) {
        byte[] buffer = new byte[objStream.Length];
        objStream.Read(buffer, 0, buffer.Length);
                                objStream.Close();
        return Convert.ToBase64String(buffer);
    }
}

public void BASE64ToFile(string strPath, string strBASE64)
{
    using (IO.FileStream objStream = new IO.FileStream(strPath, IO.FileMode.Create)) {
        byte[] buffer = Convert.FromBase64String(strBASE64);
        objStream.Write(buffer, 0, buffer.Length);
        objStream.Close();
    }
}


De data wordt hierdoor wel 1,5x zo groot.

multipart/form-data is ook een optie: http://stackoverflow.com/...quest-multipart-form-data

[ Voor 36% gewijzigd door keesdewit op 07-12-2011 20:16 ]


Acties:
  • 0 Henk 'm!

  • Rednas_N
  • Registratie: September 2010
  • Laatst online: 12:22
Bedankt voor je reactie. Ik ga het morgen even toepassen, en dan laat ik jullie de resultaten wel weten. En dat de data 1,5x zo groot wordt is in principe geen probleem, aangezien het toch om relatief kleine bestanden gaat.

Edit: Bovenstaande oplossing werkt.

[ Voor 8% gewijzigd door Rednas_N op 08-12-2011 11:28 ]

Just do it.