1

これが私の方法です

    [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);
    }

このアクションスクリプトメソッドから投稿されています:

    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と入力すると、「リソースが見つかりません」と表示されます。

なぜこれを行うのか、またはそれを理解するために私に何ができるのかについて、誰にもアイデアがありますか?

さらに情報が必要な場合はお知らせください。質問を更新します。

ありがとう、
マット

4

1 に答える 1

7

私はこれで[多くの]トラブルに見舞われ、最終的にこれを使用しました。

ビュー:

<% 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 データベースとイメージ フィールドに保存することができました。

私が欠けていた最大のものの1つは、読み取る必要があるビューのフォームメソッドでした

<% using (Html.BeginForm( "PhotoAdd", "Photos", FormMethod.Post, new { enctype = "multipart/form-data" }))   { %>

enctype を使用すると、選択したファイルのファイル名とパスを取得し、コントローラーが入力ストリームを取得できるようになります。それがないと、 Request.Files が空であるか、ファイル名のみが含まれているため開くことができないことがわかりました。

画像をデータベースに保存したら、それを表示するのは面倒です。

これがあなたの質問に答えることを願っています。

于 2009-06-28T23:07:12.690 に答える