$("#fm11").ajaxSubmit({ url: "@Url.Action("upLoadAsync", "UploadFile") type: "post", dataType: "json", contentType: "application/x-www-form-urlencoded; charset=utf-8", success: function (data) { 。。。 }, error: function (aa) { alert(aa); } });
<form id="fm11" method="post" enctype="multipart/form-data"> <input type="hidden" id="filename" name="filename" /> <input type="file" id="fileupload" name="Upload" /> <input type="button" value="上传" id="btn"> </form>
public string upLoadAsync(FormCollection formData)
{
HttpPostedFileBase file = Request.Files["fileupload"];
string fName = file.FileName;//此处乱码
}
无论任何方法 我取到的都是乱码,百度到死,求说人话的大神。最好有demo跪谢!!
我试了一下好像没问题?. 不知道怎么贴图片.. 就只贴代码出来吧..
Controller:
[HttpPost] public string upLoadAsync() { var postFile = Request.Files[0]; return postFile.FileName; }
Html & JavaScript:
<form id="fm11" method="post" enctype="multipart/form-data"> <input type="hidden" id="filename" name="filename" /> <input type="file" id="fileupload" name="Upload" /> <input type="button" value="上传" id="btn" onclick="test()"> </form> <script type="text/javascript"> function test() { $("#fm11").submit(function () { $(this).ajaxSubmit({ url: "@Url.Action("upLoadAsync","Home")", type: "post", success: function (data) { alert(data); }, error: function (data) { alert(data); } }); }); $("#fm11").submit(); } </script>
这样尝试上传了一个叫"新建文本文档 (2).txt"的文件. 输出就是"新建文本文档 (2).txt"
问题1:我不知道是不是VS2013对当前解决方案(或某个project)的属性问题。cshtml页面显示的都没问题。但是到了.cs文件里,都被转化成乱码了。我也换了个cshtml页面指向了一个.ashx。出现了相同的乱码。问题2:我也怀疑是jquery.form.js这有问题。因为我直接提交表单,.cs获取到的文件名是正确的。
@凡图: 我.cs文件里看FileName也没有乱码.. 不知道是不是你jquery.form.js 版本的问题?. 我用的是version: 3.51.0-2014.06.20 版的..你换个版本试试?
@李丶GuanYao: 我也是这个版本。那就是整个项目的编码的问题了。但是我每个页面和整个项目都看了,都是UTF-8
@凡图:
你重新创建一个项目也会吗?. 实在不行就将乱码用C#代码转一下吧..
@李丶GuanYao: 嗯,回头我试试。谢了
...难道ajax可以上传文件?你可不要吓我...
!!文件单独处理。
连问题都没看,你确实吓死我了
@凡图: 再次仔细看了问题,我很确信没看错。然后ajax上传文件也是不行的。不过ajaxSubmit这个的内部做了些处理,采用其他的方式绕过了ajax来提交文件。
关于乱码问题,建议你监视一下请求,看看是不是缺少编码参数。另外,你可以考虑在页面的head部分,加上
<meta charset="utf-8">
@幻天芒:
ajaxSubmit 上传不了文件? 你再好好学学吧。下面是 我上面的代码运行读取的文件流。
@凡图: 也请你仔细看看我的回答,我没说过ajaxSubmit不能上传文件,也不要把ajaxSubmit和ajax混为一谈。
@幻天芒: 我从开始就没问过ajax的事。ajaxsubmit就是异步提交表单,你自己说的ajax。我说过ajax?
@凡图: 请看第二次回答的解释。
charset=utf-8 改成中文试试;或者改革default
能说具体点么?
乱码还不好解决?
所有文件统一编码,都用UFT-8,每个文件,ASPX,HTML,JS等,文件编码申明都要有,
嗯,太难了
如果上传的是文件,那就是在后台将文件流转为字符串时使用的编码格式与文件本身的格式不相符,这种事情客户端不配合是无解的
你可以在接口上加一个参数.传入当前文件的编码格式.不过有点问题.如果上传的光是字符串直接上传字符串不就好了.干嘛弄成文件.
如果你用的是vs2013,请看后面的:确认下你的前端页面与控制器本身的编码格式是什么,我很怀疑你的编码格式就是GBK的编码格式(vs2013默认为GBK),他是可以识别中文的,如果你上传的文件是utf-8的当然是乱码,如果你上传的是GBK的文件,也有一种可能,在英文的编译环境下,还是会出现乱码,如果你的编码格式是GBK,就去改下vs的默认编码格式
你这个是在哪?
@凡图: 这2个文件你都加一个吧,如果是我描述的,也可以一个文件一个文件的改文件的编码格式