質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

1963閲覧

POSTされたバイナリデータを取得できない

sgrax30527

総合スコア7

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

1クリップ

投稿2018/01/13 05:14

編集2018/01/14 05:40

###前提・実現したいこと
VB2015でWebAPIを初めて作成しています。
POSTでBODYにバイナリデータを送くってもらいデータベースに保存する仕様ですが、
サーバー側でBODYからバイナリデータをどのように受け取ったらいいかわからず
困っています。

ネットで探してみたのですが、どうにも理解できない状況です。
一般的な方法等教えて頂けますか?

Request.Contentにはデータが入っているようなのは確認しています。
その後どうやって受け取って良いかが分かりません。

###発生している問題・エラーメッセージ

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

Imports System.Net
Imports System.Web.Http
Imports System.Net.Http
Imports Newtonsoft.Json
Imports System.Drawing
Imports System.IO

Public Function PostValue() As HttpResponseMessage
Dim strPhotoId As String
Dim stream As IO.Stream
Dim intByteLen As Integer = synova.Dotnet.Common.Lib.F_NullToInteger(Request.Content.Headers.GetValues("Content-Length")(0).ToString)
Dim saveFileBytes(intByteLen) As Byte

stream = Request.Content.ReadAsStreamAsync().Result If stream.CanRead = True Then stream.ReadAsync(saveFileBytes, 0, intByteLen) End If Return Request.CreateResponse(HttpStatusCode.Accepted, strPhotoId)

End Function

###試したこと
ソースをいったん直しましたので変更致します。
streamでバイトまでは取れてるようなのですが、取得したバイトを
そのままイメージに保存した場合エラーが発生しています。
元のファイルのバイト数が17,525に対して
読込んだ際のバイト数が17,718になっています。
不要なデータが存在するってことでしょうか?

以下Fidderでファイルをアップした際の内容です。
<POST>
Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
User-Agent: Fiddler
Host: localhost
Content-Length: 17718

<RAWタブの情報>
POST http://localhost/WebApplication2/photos HTTP/1.1
Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468
User-Agent: Fiddler
Host: localhost
Content-Length: 194

---------------------------acebdf13572468
Content-Disposition: form-data; name="fieldNameHere"; filename="test.jpeg"
Content-Type: image/jpeg

---------------------------acebdf13572468--

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/01/13 05:32

サーバー側のアプリは何なのですか? ASP.NET Web API? WCF? Web サービス? その他? そして、クライアント側は? Windows Forms? WPF? ブラウザ? その他?
sgrax30527

2018/01/13 05:48 編集

サーバー側のアプリはASP.NET WebAPIです。 クライアント側はPHPでのプログラムになりますが、現状テストで使用しているのは Restlet Clientでデータの送信を行っています。
退会済みユーザー

退会済みユーザー

2018/01/14 01:53 編集

> サーバー側のアプリはASP.NET WebAPIです。 ← その部分のコードをアップできませんか? あと、クライアントから送信されるデータがどうなっているか Fiddler などのパケットキャプチャツールを使って調べて、結果を書いてください。
退会済みユーザー

退会済みユーザー

2018/01/13 11:41

あと、ASP.NET のタグをつけていただくようお願いします。
guest

回答1

0

自己解決

自己解決しました。
下記内容でTEMPにファイル保存後、バイトで読み直してやりたいことできました。

Dim rootPath = Path.GetTempPath()
Dim Provider = New MultipartFormDataStreamProvider(rootPath)

Request.Content.ReadAsMultipartAsync(Provider)

For Each File In Provider.FileData
Dim FileInfo = New FileInfo(File.LocalFileName)
Next

投稿2018/01/14 07:25

sgrax30527

総合スコア7

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問