コントローラーのポストメソッドの呼び出しで問題が発生する
-
20-08-2019 - |
質問
これが私の方法です
[AcceptVerbs(HttpVerbs.Post)]
public void SaveImage(FormCollection formValues)
{
byte[] contents = Convert.FromBase64String(Request.Form["file"]);
System.IO.File.WriteAllBytes(Server.MapPath(Request.Form["name"]), contents);
}
この actionscript メソッドからポストされます。
public function encodeAndSave(e:MouseEvent = null):void
{
var date:Date = new Date();
var by:ByteArray = PNGEnc.encode(canvas.main_bdata);
var req:URLRequest = new URLRequest(server_path+"Home/SaveImage");
var params:URLVariables = new URLVariables();
params.file = Base64.encodeByteArray(by);
params.name = "MyImage.png";
req.method = URLRequestMethod.POST;
req.data = params;
var ldr:URLLoader = new URLLoader(req);
ldr.addEventListener(Event.COMPLETE, complete);
ldr.load(req);
function complete(e:Event):void
{
navigateToURL(new URLRequest("?" + Math.random()), "_self");
}
}
しかし、encodeAndSave メソッドを実行すると、ファイルはサーバーに保存されません...
SaveImage メソッドが実行されたかどうかを確認する方法を知っている人はいますか?また、次のように入力すると、http://www.mysite.com/Home/SaveImage アドレスバーに「リソースが見つかりません」と表示されます。
なぜこれが行われるのか、またはそれを理解するために何ができるかについて何かアイデアがある人はいますか?
さらに詳しい情報が必要な場合はお知らせください。質問を更新します。
ありがとう、
マット
解決
これにはかなり苦労しましたが、最終的にはこれを使いました。
ビュー:
<% using (Html.BeginForm( "PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" })) { %>
<input type="file" id="file" name="file" class="field" style="width:300px;"/>
<%} %>
コントローラ:
var file = Request.Files["file"];
byte[] buf = new byte[file.ContentLength];
file.InputStream.Read(buf, 0, file.ContentLength);
これがあなたが探しているものであるかどうかはわかりませんが、前述したように、ユーザーが私の Web サイトに自分の写真をアップロードできるようにするには多くの問題があります。
基本的に、「ファイル」タイプのフィールドとポストバックイベントの「送信」ボタンを含むビューがあります。
次に、コントローラーには次のものがあります。
[AcceptVerbs( HttpVerbs.Post ), Authorize]
public ActionResult PhotoAdd(FormCollection collection)
{
try
{
var file = Request.Files["file"];
byte[] buf = new byte[file.ContentLength];
file.InputStream.Read(buf, 0, file.ContentLength);
私が遭遇した問題は、コントローラーにファイル名とパスとともにリクエストを取得させることでした。それを取得したら、ファイルをバイト配列に変換して、SQL データベースと画像フィールドに保存できます。
私が見逃していた最大の点は、読み取る必要があるビューの Form メソッドでした。
<% using (Html.BeginForm( "PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" })) { %>
enctype を使用すると、選択したファイルのファイル名とパスを取得し、コントローラーが入力ストリームを取得できるようになります。これがないと、Request.Files が空であるか、ファイル名のみが含まれているために開くことができないことがわかりました。
画像をデータベースに保存したら、それを表示するのは簡単です。
これであなたの質問の答えが得られることを願っています。