C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[11]: VB.netとASP.netを用いたファイルアップロード


(過去ログ 177 を表示中)

[トピック内 18 記事 (1 - 18 表示)]  << 0 >>

■101494 / inTopicNo.1)  VB.netとASP.netを用いたファイルアップロード
  
□投稿者/ SH (1回)-(2023/03/06(Mon) 19:46:18)

分類:[ASP.NET (VB)] 

こんばんは。
初めまして。
開発初心者です。わかりにくい部分があるかと思います。すみません。

【作っているもの】
クライアントサイドにVB.netのWindowsフォームアプリケーション サーバーサイドにASP.netのWebAPIを用いてファイルのアップロード/ダウンロードを行う、クライアントサーバーアプリケーション

【わからないこと】
クライアントサイドで送信したファイルをサーバー側で受け取る方法

【状況】
クライアント/サーバーともにVisualStudio 2022を用いて開発しています。
サーバーサイドのアプリケーションはAWSでたてて、IISをインストールしたサーバー上にVisualStudioのWebデプロイにより配置しています。
クライアントサイドではmultipart/form-dataのMy.Computer.Network.FileUploadをもちいてファイルをサーバーサイドに送ります。

クライアントサイドでファイルを選択してアップロードを行おうとするとMy.Computer.Network.FileUploadの行で下記のエラーが出ます。
System.Net.WebException: 'リモート サーバーがエラーを返しました: (415) Unsupported Media Type

サーバーサイドのPOSTリクエストの受け口のメソッドのファイル用の引数のデータ型が間違っているのかと推測しております。
サーバーサイドのスクリプトについて記載されている記事がなかなかなく困っております。
ご助言いただけますと幸いです。


それぞれのスクリプトを載せておきます。

クライアントサイド
----------------------------------------------------ここから--------------------------------------------------------
Private Sub Upload()
Dim url As String = "http://" & Authentication.Form_APServer_IP.Text & "/api/test1"
    For i = 0 To Form_UploadFiles.Items.Count - 1

        Me.Form_UploadFiles.SelectedIndex = i
My.Computer.Network.UploadFile(Me.Form_UploadFiles.SelectedItem, url, "", "", True, FileIO.UICancelOption.DoNothing)

Next
End Sub
----------------------------------------------------ここまで--------------------------------------------------------

サーバーサイド
※サーバーサイドのスクリプトについてはデフォルトで作成されるものをほんの少しいじっただけのもので、これで動作を確認しようとしている段階です。
----------------------------------------------------ここから--------------------------------------------------------
Imports System.Net
Imports System.Web.Http
Imports System.IO
Imports System.Net.Http

Public Class test1Controller
Inherits ApiController

  Public Function PostValue(<FromBody()> ByVal file As HttpPostedFile)

Return "POSTvalue"

  End Function

End Class
----------------------------------------------------ここまで--------------------------------------------------------


その他必要な情報等ございましたらお申し付けください。
よろしくお願いいたします。
引用返信 編集キー/
■101498 / inTopicNo.2)  Re[1]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ Hongliang (1280回)-(2023/03/06(Mon) 22:16:35)
とりあえず、MSの参考となりそうなページ
https://learn.microsoft.com/ja-jp/aspnet/web-api/overview/advanced/sending-html-form-data-part-2
ASP.NET Core Web APIの方だとまた別だったりするので、ご使用のフレームワーク(プロジェクトを作成したときのテンプレート)はバージョンも含めできる限り正確に書きましょう。

あと、
・まずはサーバ側もVisual Studioを使ってローカル環境でデバッグしたほうが手軽ではないでしょうか。
・Fiddlerなどパケットキャプチャでどんなパケットが流れているか見られるようにしておくと便利です。
 My.Computer.Network.UploadFileが実際にどんなリクエストを投げているのかは事前に知っておくべきでしょう。
引用返信 編集キー/
■101499 / inTopicNo.3)  Re[1]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ WebSurfer (2634回)-(2023/03/06(Mon) 22:56:36)
No101494 (SH さん) に返信

> サーバーサイドのアプリケーションはAWSでたてて、IISをインストールしたサーバー上にVisualStudioのWebデプロイにより配置しています。

AWS だそうですが、普通にオンプレミスで Windows Server + IIS を使ったときとどう違うんですか?
引用返信 編集キー/
■101500 / inTopicNo.4)  Re[2]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ WebSurfer (2635回)-(2023/03/06(Mon) 23:18:03)
No101494 (SH さん) に返信

My.Computer.Network.FileUpload って何ですか?
引用返信 編集キー/
■101501 / inTopicNo.5)  Re[2]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (3回)-(2023/03/07(Tue) 08:57:49)
No101498 (Hongliang さん) に返信
> とりあえず、MSの参考となりそうなページ
> https://learn.microsoft.com/ja-jp/aspnet/web-api/overview/advanced/sending-html-form-data-part-2
> ASP.NET Core Web APIの方だとまた別だったりするので、ご使用のフレームワーク(プロジェクトを作成したときのテンプレート)はバージョンも含めできる限り正確に書きましょう。

→ありがとうございます。バージョンは.netFramework4.8になります。

> あと、
> ・まずはサーバ側もVisual Studioを使ってローカル環境でデバッグしたほうが手軽ではないでしょうか。
> ・Fiddlerなどパケットキャプチャでどんなパケットが流れているか見られるようにしておくと便利です。
>  My.Computer.Network.UploadFileが実際にどんなリクエストを投げているのかは事前に知っておくべきでしょう。

→Fiddler調べてみました。使ってみようと思います。
引用返信 編集キー/
■101502 / inTopicNo.6)  Re[2]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (4回)-(2023/03/07(Tue) 08:59:22)
No101499 (WebSurfer さん) に返信
> ■No101494 (SH さん) に返信
>
>>サーバーサイドのアプリケーションはAWSでたてて、IISをインストールしたサーバー上にVisualStudioのWebデプロイにより配置しています。
>
> AWS だそうですが、普通にオンプレミスで Windows Server + IIS を使ったときとどう違うんですか?

→ありがとうございます。
 オンプレとAWSでの違いは特にはないと思っています。
 実際に本番で利用する環境がAWS上のサーバに対してのファイル転送のためそれを想定して環境を作っております。
引用返信 編集キー/
■101503 / inTopicNo.7)  Re[3]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (5回)-(2023/03/07(Tue) 09:00:19)
No101500 (WebSurfer さん) に返信
> ■No101494 (SH さん) に返信
>
> My.Computer.Network.FileUpload って何ですか?
→ありがとうございます。
 こちらを参考にしました。
 https://learn.microsoft.com/ja-jp/dotnet/api/microsoft.visualbasic.devices.network.uploadfile?view=windowsdesktop-7.0
 http://dobon.net/vb/dotnet/internet/webrequestpost.html
引用返信 編集キー/
■101504 / inTopicNo.8)  Re[3]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ WebSurfer (2636回)-(2023/03/07(Tue) 09:38:20)
No101502 (SH さん) に返信

質問者さんの環境では試してませんので、たぶんですが、アクションメソッド
の引数の FormBody を FromForm に変更すれば Unsupported Media Type の
問題は解決すると思います。

あと、HttpPostedFile を HttpPostedFileBase に変更しないとダメかも。

その先に進んで、アップロードしたファイルをサーバーに保存する際、アクセ
ス権の問題が出ると思います。AWS の環境で IIS のワーカープロセスに必要な
アクセス権を与えることができるか、調査しておくことをお勧めします。
引用返信 編集キー/
■101507 / inTopicNo.9)  Re[4]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (6回)-(2023/03/07(Tue) 14:14:49)
No101504 (WebSurfer さん) に返信
> ■No101502 (SH さん) に返信
>
> 質問者さんの環境では試してませんので、たぶんですが、アクションメソッド
> の引数の FormBody を FromForm に変更すれば Unsupported Media Type の
> 問題は解決すると思います。
>
> あと、HttpPostedFile を HttpPostedFileBase に変更しないとダメかも。

→ありがとうございます。
 いただいた方法で試してみましたが、やはりUnsupported Media Typeのエラーが出てきます…

> その先に進んで、アップロードしたファイルをサーバーに保存する際、アクセ
> ス権の問題が出ると思います。AWS の環境で IIS のワーカープロセスに必要な
> アクセス権を与えることができるか、調査しておくことをお勧めします。

→そうですね。その先についても考えておきます。
引用返信 編集キー/
■101508 / inTopicNo.10)  Re[5]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ 伝説のカレー (81回)-(2023/03/07(Tue) 15:07:03)
No101507 (SH さん) に返信
Media Typeを追加すれば良いみたいです
https://gooner.hateblo.jp/entry/2014/04/29/mediatypeformatter/

引用返信 編集キー/
■101510 / inTopicNo.11)  Re[6]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (7回)-(2023/03/07(Tue) 17:22:27)
No101508 (伝説のカレー さん) に返信
> ■No101507 (SH さん) に返信
> Media Typeを追加すれば良いみたいです
> https://gooner.hateblo.jp/entry/2014/04/29/mediatypeformatter/

→ありがとうございます。
 せっかくいただいたご助言ですが、当方のスキルと知識が乏しすぎてリンク先の内容を理解できませんでした。
 よろしければ解説していただけませんでしょうか・・・?
 大変申し訳ございません。
引用返信 編集キー/
■101511 / inTopicNo.12)  Re[5]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ WebSurfer (2637回)-(2023/03/07(Tue) 18:26:15)
No101507 (SH さん) に返信

>  いただいた方法で試してみましたが、やはりUnsupported Media Typeのエラーが出てきます…

見落としてました。すみません

.NET Framework 版の ASP.NET Web API はファイルアップロードの受信に対応してませ
ん。(正確に言うと multipart/form-data 形式で送信されてきたデータのフォーマッタ
ーが実装されていない)

なので、解決策は以下のいずれかになると思います。

(1) Web API に代えて MVC のアクションメソッドを使う。

(2) 伝説のカレーさんが紹介されたカスタムフォーマッターを自作して使う。

(3) Hongliang さんが紹介された Microsoft のドキュメントのようにする。

(4) .NET Framework 版は止めて .NET 6.0 版 Web API を使う。

簡単かつ現実的なのは (1) だと思います。

あと、My.Computer.Network.UploadFile の使用も考え直して、HttpClient などを検討し
た方が良さそうです。name 属性の指定、Content-Type の送信ができないようで、そこが
致命的な問題になるかもしれませんので。


引用返信 編集キー/
■101514 / inTopicNo.13)  Re[6]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (8回)-(2023/03/07(Tue) 22:31:04)
No101511 (WebSurfer さん) に返信
> ■No101507 (SH さん) に返信
>
>> いただいた方法で試してみましたが、やはりUnsupported Media Typeのエラーが出てきます…
>
> 見落としてました。すみません
>
> .NET Framework 版の ASP.NET Web API はファイルアップロードの受信に対応してませ
> ん。(正確に言うと multipart/form-data 形式で送信されてきたデータのフォーマッタ
> ーが実装されていない)
>
> なので、解決策は以下のいずれかになると思います。
>
> (1) Web API に代えて MVC のアクションメソッドを使う。
>
> (2) 伝説のカレーさんが紹介されたカスタムフォーマッターを自作して使う。
>
> (3) Hongliang さんが紹介された Microsoft のドキュメントのようにする。
>
> (4) .NET Framework 版は止めて .NET 6.0 版 Web API を使う。
>
> 簡単かつ現実的なのは (1) だと思います。
>
> あと、My.Computer.Network.UploadFile の使用も考え直して、HttpClient などを検討し
> た方が良さそうです。name 属性の指定、Content-Type の送信ができないようで、そこが
> 致命的な問題になるかもしれませんので。
>
>
→ありがとうございます。
 そうなのですね…
 現状ファイルのアップロード・ダウンロード以外の部分(ダウンロードファイルの一覧を取得してクライアントに返す・ファイルサイズを計算して格納先の空き容量と比較するなど)についてはWebAPIで実装してしまいました。
 それはそのまま残しつつアップロード・ダウンロードの部分だけMVCのアクションメソッドでの実装をしてみようかなと思っています。Microsoft Learnを見た感じだとWebAPIとMVCの併用ができるという認識ですが合っていますでしょうか?
 https://learn.microsoft.com/ja-jp/archive/msdn-magazine/2013/may/asp-net-leverage-multiple-code-frameworks-with-one-asp-net
引用返信 編集キー/
■101515 / inTopicNo.14)  Re[7]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ WebSurfer (2638回)-(2023/03/08(Wed) 08:09:31)
No101514 (SH さん) に返信

> WebAPIとMVCの併用ができるという認識ですが合っていますでしょうか?

合ってます。
引用返信 編集キー/
■101519 / inTopicNo.15)  Re[8]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (9回)-(2023/03/08(Wed) 21:33:41)
No101515 (WebSurfer さん) に返信
> ■No101514 (SH さん) に返信
>
>>WebAPIとMVCの併用ができるという認識ですが合っていますでしょうか?
>
> 合ってます。

→ありがとうございます。
 試してみます。
引用返信 編集キー/
■101528 / inTopicNo.16)  Re[9]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ WebSurfer (2642回)-(2023/03/10(Fri) 10:02:19)
No101519 (SH さん) に返信

ASP.NET MVC に Web API 追加した例なら以下の記事にあります。ご参考まで。

ASP.NET MVC に Web API 追加
http://surferonwww.info/BlogEngine/post/2018/12/22/adding-webapi-to-existing-mvc-application.aspx

ただ、ユーザー認証をどうするつもりなのか分かりませんが、Visual Studio
でプロジェクトを作成する際、認証を「個別のユーザーアカウントカウント」と
した場合、デフォルトでは MVC は認証クッキー、Web API はベアラトークンを
使うことになるはずです。

そのあたりは上に紹介した記事に書いてあります。

ベアラトークンを使うという要件がある場合は、上の No101511 で書いた案の
うち「(3) Hongliang さんが紹介された Microsoft のドキュメントのようにす
る。」が良さそうです。
引用返信 編集キー/
■101558 / inTopicNo.17)  Re[10]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (10回)-(2023/03/15(Wed) 10:37:23)
No101528 (WebSurfer さん) に返信
> ■No101519 (SH さん) に返信
>
> ASP.NET MVC に Web API 追加した例なら以下の記事にあります。ご参考まで。
>
> ASP.NET MVC に Web API 追加
> http://surferonwww.info/BlogEngine/post/2018/12/22/adding-webapi-to-existing-mvc-application.aspx
>
> ただ、ユーザー認証をどうするつもりなのか分かりませんが、Visual Studio
> でプロジェクトを作成する際、認証を「個別のユーザーアカウントカウント」と
> した場合、デフォルトでは MVC は認証クッキー、Web API はベアラトークンを
> 使うことになるはずです。
>
> そのあたりは上に紹介した記事に書いてあります。
>
> ベアラトークンを使うという要件がある場合は、上の No101511 で書いた案の
> うち「(3) Hongliang さんが紹介された Microsoft のドキュメントのようにす
> る。」が良さそうです。

→返信が遅くなりすみません。詳しくありがとうございます。
 送っていただいた記事を確認して試してみます。
引用返信 編集キー/
■101559 / inTopicNo.18)  Re[11]: VB.netとASP.netを用いたファイルアップロード
□投稿者/ SH (11回)-(2023/03/15(Wed) 10:39:19)
No101558 (SH さん) に返信
> ■No101528 (WebSurfer さん) に返信
>>■No101519 (SH さん) に返信
>>
>>ASP.NET MVC に Web API 追加した例なら以下の記事にあります。ご参考まで。
>>
>>ASP.NET MVC に Web API 追加
>>http://surferonwww.info/BlogEngine/post/2018/12/22/adding-webapi-to-existing-mvc-application.aspx
>>
>>ただ、ユーザー認証をどうするつもりなのか分かりませんが、Visual Studio
>>でプロジェクトを作成する際、認証を「個別のユーザーアカウントカウント」と
>>した場合、デフォルトでは MVC は認証クッキー、Web API はベアラトークンを
>>使うことになるはずです。
>>
>>そのあたりは上に紹介した記事に書いてあります。
>>
>>ベアラトークンを使うという要件がある場合は、上の No101511 で書いた案の
>>うち「(3) Hongliang さんが紹介された Microsoft のドキュメントのようにす
>>る。」が良さそうです。
>
> →返信が遅くなりすみません。
   解決いたしました!皆様ありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -