通过Uploadify将参数传递给Web API

时间:2014-03-20 15:23:58

标签: jquery asp.net-web-api uploadify

如何将对象从uploadify传递到webapi控制器?我不确定如何正确使用ScriptData参数。

我试过了:

    $("#fileInput").uploadify({

            'uploader': '/api/files/Addfiles/',
            'swf'       : '/uploadify/uploadify.swf',
            'cancelImage' : '/uploadify/uploadify-cancel.png',
            'auto': true,
            'folder': "/uploads",
            'scriptData'     : {'product': null }               
        }); 

这是我的控制器:

    public Task<HttpResponseMessage> AddFiles(Product product )
    {
    }

如果我从控制器中删除了Product参数,控制器就会被调用(点击&#34;选择文件&#34;)一切正常。但是当我尝试传递参数时,它不会被调用。我的路线模板是:

  api/{controller}/{action/{id}

1 个答案:

答案 0 :(得分:0)

好。经过一些调查后,我发现uploadify 与标准的MVC控制器操作一起工作,但似乎没有将scriptData作为请求URL的一部分传递(根据Fiddler2)。

作为替代方法,您可以修改formData设置以回发其他信息:

示例视图:

<div class="myuploader">
    <input id="file_upload" type="file" name="file_upload" />
    <input id="uploadfiles" type="button" value="Upload files" />
</div>

<script type="text/javascript">
    $(function () {
        $('.myuploader').uploadify({
            swf: '/content/uploadify.swf',
            uploader: 'home/upload',
            auto: true,
            formData: {product: 456}
            });

控制器上传操作:

    public ActionResult Upload()
    {
        HttpPostedFileBase oFile = Request.Files["Filedata"];
        if (oFile != null)
        {
            string sDirectory = Server.MapPath("~/Files/");
            string filename = Path.GetFileName(oFile.FileName);

            // You can pick up any parameter set in the formData member of the plugin using its name
            string testParam = Request.Form["product"];   // This gets 456

            // Do something with the file here
            return Content("1");
        }
        else
        {
            return Content("0");
        }
    }
}

跟进:

我仍然无法使用标准的WebApi控制器使Uploadify正常工作。

顺便说一下:由于我们需要SWF和HTML 5支持,我们将uploadify和商业上传包装在我们自己的插件中,该插件根据浏览器功能的需要动态转换参数。我们还让它自动提取任何隐藏的字段值并将它们组合到formData中。你可能想尝试这样的事情。