Stab im Dunkeln - die Begrenzungszeichenfolge muss eine führende --
haben, und die letzte Zeile der Nachricht muss das folgende Format haben: --boundarystring--
, andernfalls ist die Nachricht ungültig. Die MIME Entry auf Wikipedia enthält ein gutes Beispiel dafür, wie die Nachricht aussehen soll. Es ist ein guter Anfang, die Anfrage an eine Datei zu senden und sicherzustellen, dass es sich um eine gültige mehrteilige Nachricht handelt.
bearbeiten
Sie sollten wirklich die System.Net.WebClient Rahmen anstelle der Methode verwenden, die Sie verwenden. Es kapselt all diese Funktionalität ein.
Durch Ändern Ihrer Mime-Body-Konstruktion konnte ich erfolgreich aus dem Skript hochladen. Beachten Sie, dass ich die Content-Type
aus den Parametern entfernt habe, da sie nicht benötigt wird. Außerdem habe ich sichergestellt, dass der boundaryString richtig gebildet wurde, dh die Zeichenfolge, die als boundaryString
übergeben wurde, wurde im Anforderungsheader ohne den führenden --
verwendet
Ich machte die Funktion führen Doppel-Pflicht - es berechnet die Größe nur, wenn der Stream null
ist.
public static long sendMultiPartReq(Stream req, string boundaryString, object[] files, object[] parameters)
{
String CRLF = "\r\n";
byte[] b;
long contentLength = 0;
foreach (string[] file in files)
{
b = Encoding.UTF8.GetBytes(
CRLF + "--" + boundaryString + CRLF +
String.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" + CRLF,
file[0], Path.GetFileName(file[1])) +
"Content-Type: image/png" + CRLF + CRLF);
contentLength += b.LongLength;
if (req != null) req.Write(b, 0, b.Length);
if (File.Exists(file[1]))
{
b = File.ReadAllBytes(file[1]);
contentLength += b.LongLength;
if (req != null) req.Write(b, 0, b.Length);
}
b = Encoding.UTF8.GetBytes(CRLF);
contentLength += b.LongLength;
if (req != null) req.Write(b, 0, b.Length);
}
foreach (string[] parameter in parameters)
{
b = Encoding.UTF8.GetBytes(
"--" + boundaryString + CRLF +
String.Format("Content-Disposition: form-data; name=\"{0}\"" + CRLF, parameter[0]) +
CRLF + parameter[1] + CRLF);
contentLength += b.LongLength;
if (req != null) req.Write(b, 0, b.Length);
}
b = Encoding.UTF8.GetBytes("--" + boundaryString + "--" + CRLF);
contentLength += b.LongLength;
if (req != null) req.Write(b, 0, b.Length);
return contentLength;
}
Welche Fehler? Ausnahmen? – Oded
Keine Fehler. Ich bekomme nur eine 301 zurück und wireshark kann die Daten nicht lesen. – user1312414