【问题标题】:Having troubles calling a Controller Post Method调用控制器发布方法时遇到问题
【发布时间】:2009-06-28 19:23:38
【问题描述】:

这是我的方法

    [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 在地址栏中显示“找不到资源”。

任何人对它为什么会这样做或我可以做些什么来试图弄清楚它有任何想法?

如果您需要更多信息,请告诉我,我会更新我的问题。

谢谢,
马特

【问题讨论】:

    标签: asp.net-mvc actionscript-3 file-io controller http-post


    【解决方案1】:

    我遇到了[很多]麻烦,最后我用了这个;

    查看

    <% 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);
    

    我不确定这是否是您正在寻找的东西,但就像我说的那样,我在允许我的用户在我的网站上上传自己的照片时遇到了很多问题。

    基本上我有一个视图,其中包含一个“文件”类型的字段和一个用于回发事件的“提交”按钮。

    然后在控制器中我有以下内容;

        [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 数据库和图像字段中。

    我最缺的一件事情是需要读取的 View 中的 Form 方法

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

    enctype 允许您获取所选文件的文件名和路径,并使控制器能够获取输入流。没有它,我发现 Request.Files 是空的,或者它只包含文件名,因此无法打开它。

    将图像保存到数据库后,显示它是轻而易举的事。

    我希望这能回答你的问题。

    【讨论】:

    • 你能解释一下吗?抱歉,它看起来不像是即插即用的东西,所以我只是想弄清楚它是如何工作的,这样我就可以为我的网络应用程序进行一些更改
    • 我要补充一点,我已经能够将“HttpPostedFileBase 文件”添加到我的控制器的参数列表中,这允许我跳过整个“Request.Files”部分,因为文件已经加载了上传的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 2018-12-21
    • 1970-01-01
    • 2017-08-24
    • 2017-11-11
    • 1970-01-01
    • 2019-09-18
    相关资源
    最近更新 更多