前提・実現したいこと
vb.netで、HTTPサーバーにPOST要求を行い、EXCELファイルを指定するURLアップロードしたいと考えています。
この際、ContentTypeは"multipart/form-data"を指定しています。
pdfのアップロードでは上手く行きますが、EXCELでは上手く行かず、躓いています。
発生している問題・エラーメッセージ
上手く行ったpdf用から、EXCEL用に変更するにあたり、以下のようにContent-Typeを変更しました。
"Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
これでEXCELにも対応できると考えたのですが、エラーとなります。(ソースコードの★ここで例外発生★の箇所)
他にも変更する必要がある箇所があるのでしょうか。
※アップロード先のサーバーからは、エラーコードnullで返ってきます。
該当のソースコード
VB.NET
1'送信するファイルのパス 2Dim filePath As String = "C:\sample1.xlsx" 3Dim fileName As String = System.IO.Path.GetFileName(filePath) 4'送信先のURL 5Dim url As String = "[送信先のURL]" 6'文字コード 7Dim enc As System.Text.Encoding = _ 8 System.Text.Encoding.GetEncoding("UTF-8") 9'区切り文字列 10Dim boundary As String = System.Environment.TickCount.ToString() 11 12'WebRequestの作成 13Dim req As System.Net.HttpWebRequest = _ 14 CType(System.Net.WebRequest.Create(url), _ 15 System.Net.HttpWebRequest) 16'メソッドにPOSTを指定 17req.Method = "POST" 18'ContentTypeを設定 19req.ContentType = "multipart/form-data; boundary=" + boundary 20 21'POST送信するデータを作成 22Dim postData As String = "" 23postData = "--" + boundary + vbCrLf + 24 "Content-Disposition: form-data; name=""path""" + vbCrLf + 25 vbCrLf + 26 "[アップロード先のパス]" + 27 vbCrLf + 28 "--" + boundary + vbCrLf + 29 "Content-Disposition: form-data; name=""name""" + vbCrLf + 30 vbCrLf + 31 "sample.xlsx" + 32 vbCrLf + 33 "--" + boundary + vbCrLf + 34 "Content-Disposition: form-data; name=""file""; filename=""sample.xlsx""" + vbCrLf + 35 "Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + vbCrLf + 36 vbCrLf '★ここをEXCEL用のContent-Typeに変更★ 37 38'バイト型配列に変換 39Dim startData As Byte() = enc.GetBytes(postData) 40postData = vbCrLf + "--" + boundary + "--" + vbCrLf 41Dim endData As Byte() = enc.GetBytes(postData) 42 43'送信するファイルを開く 44Dim fs As New System.IO.FileStream( _ 45 filePath, _ 46 System.IO.FileMode.Open, _ 47 System.IO.FileAccess.Read) 48 49'POST送信するデータの長さを指定 50req.ContentLength = startData.Length + endData.Length + fs.Length 51 52'データをPOST送信するためのStreamを取得 53Dim reqStream As System.IO.Stream = req.GetRequestStream() 54'送信するデータを書き込む 55reqStream.Write(startData, 0, startData.Length) 56'ファイルの内容を送信 57Dim readData(&H1000) As Byte 58Dim readSize As Integer = 0 59While True 60 readSize = fs.Read(readData, 0, readData.Length) 61 If readSize = 0 Then 62 Exit While 63 End If 64 reqStream.Write(readData, 0, readSize) 65End While 66fs.Close() 67reqStream.Write(endData, 0, endData.Length) 68reqStream.Close() 69 70'サーバーからの応答を受信するためのWebResponseを取得 71Dim res As System.Net.HttpWebResponse = _ '★ここで例外発生★ 72 CType(req.GetResponse(), System.Net.HttpWebResponse) 73応答データを受信するためのStreamを取得 74Dim resStream As System.IO.Stream = res.GetResponseStream() 75'受信して表示 76Dim sr As New System.IO.StreamReader(resStream, enc)
試したこと
以下サイトを参考にしています。
POSTでデータを送信する
Content-Typeは、以下を参考にEXCELに対応するものを設定しました。
Content-Type
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/24 09:11
退会済みユーザー
2021/02/24 09:35
2021/02/24 11:18
退会済みユーザー
2021/02/25 02:39
2021/02/26 00:30
退会済みユーザー
2021/02/26 06:49
退会済みユーザー
2021/03/03 10:47