Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过JSON模型上传ASP.NET MVC 3文件_Javascript_Json_Asp.net Mvc 3 - Fatal编程技术网

Javascript 通过JSON模型上传ASP.NET MVC 3文件

Javascript 通过JSON模型上传ASP.NET MVC 3文件,javascript,json,asp.net-mvc-3,Javascript,Json,Asp.net Mvc 3,我的web应用程序通过发布JSON数据与服务器端(ASP.NET MVC 3)交互 指向某些URL(不使用html表单) 如何使用JSON将文件发布到服务器并将其绑定到HttpPostedFileBase,而不使用多部分表单 谢谢 这是可以做到的,但是你会遇到跨浏览器的问题,你可以在这里找到更多详细信息:或者只是谷歌“ajax文件上传”我已经做到了,但没有使用HttpPostedFileBase从MVC应用程序获取内容。我只是简单地使用了JSON 您只需使用FileReader.onload(在

我的web应用程序通过发布JSON数据与服务器端(ASP.NET MVC 3)交互 指向某些URL(不使用html表单)

如何使用JSON将文件发布到服务器并将其绑定到
HttpPostedFileBase
,而不使用多部分表单


谢谢

这是可以做到的,但是你会遇到跨浏览器的问题,你可以在这里找到更多详细信息:或者只是谷歌“ajax文件上传”

我已经做到了,但没有使用
HttpPostedFileBase
从MVC应用程序获取内容。我只是简单地使用了JSON

您只需使用
FileReader.onload
(在HTML5上)方法提取文件内容,并将其作为Base64字符串直接发布到MVC控制器。上传按钮是一个标签

    var file = $('#upload-button')[0].files[0];
    var reader = new FileReader();
    reader.onload = (function (f) {
        return function (e) {
            if (e.target.readyState == FileReader.DONE) {
                $.ajax("FileStore/SavePicture", {
                    data: { content: e.target.result, name: f.name },
                    type: "post",
                    contentType: "application/json"
                });
            }
        };
    })(file)
从那里,您可以使用
Convert.FromBase64String
方法转换为
字节[]
。这就是动作内容的样子

    string base64String = content;
    // Get the starting point of the actual content from the base64String.
    int start = base64String.IndexOf(",") + 1;
    int length = base64String.Length - start;
    contentAsString = base64String.Substring(start, length);

    byte[] dataAsBytes = Convert.FromBase64String(contentAsString);

可能还有其他方法。

据我所知,您不能发布文件,除非您使用多部分表单。我可以将文件作为二进制字符串发布为模型属性之一…如何访问该文件?如何将文件转换为二进制文件?JavaScript没有本地文件访问权限。我正在使用HTML5文件API FileReader.IE是什么,70%的市场份额,如果IE不支持,有什么意义?@Liam一切都取决于项目,如果不正常提交,他也可以检查支持情况。是的,我这样做了,但还有另一个问题。事实上,我正在使用JavaScriptSerializer对JSON进行反序列化,base64字符串不会自动反序列化为HttpPostedFileBase属性。可能有任何属性可以应用于模型的HttpPostedFileBase属性,以便我可以自定义此特定属性的反序列化过程?是的,也不适合我。因此,我使用这种方法作为变通解决方案。