Stab in the dark - 境界文字列には先頭--
に が必要であり、メッセージの最後の行は次の形式にする必要があり--boundarystring--
ます。ウィキペディアのMIME エントリには、メッセージがどのように表示されるかの良い例が含まれています。リクエストをファイルにダンプし、それが有効なマルチパート メッセージであることを確認することから始めましょう。
編集
使用しているメソッドではなく、 System.Net.WebClientフレームワークを実際に使用する必要があります。このすべての機能をカプセル化します。
MIME 本体の構造を変更することで、スクリプトからのアップロードに成功しました。必要ないのでパラメーターからを削除したことに注意してください。Content-Type
さらに、boundaryString が適切に形成されていることを確認しました。つまり、渡される文字列はboundaryString
、先頭の--
私はこの関数に 2 つの役割を持たせました - Stream が の場合にのみサイズを計算しますnull
。
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;
}