为什么我的JavaScript代码没有成功上传我的文件?

为什么我的JavaScript代码没有成功上传我的文件?,javascript,jquery,filereader,Javascript,Jquery,Filereader,好的,我有这个JavaScript代码。它使用FileReader对象上载文件。但每当我试图上传一个包含+字符的MID文件时,它就会把它变成一个空格!我知道错误不在服务器端脚本中,因为我在FileReader读取了我的MID文件之后立即在客户端签出了数据,结果与上传的最终结果相同。我也试着把文件当作文本来读,但也不起作用。请忽略代码注释,我把它们放进去是为了尝试一些代码的不同版本,而不必删除以前的版本。我相当肯定这个错误在上传功能的某个地方 注意:由于某些原因,StackOverflow无法正确

好的,我有这个JavaScript代码。它使用FileReader对象上载文件。但每当我试图上传一个包含+字符的MID文件时,它就会把它变成一个空格!我知道错误不在服务器端脚本中,因为我在FileReader读取了我的MID文件之后立即在客户端签出了数据,结果与上传的最终结果相同。我也试着把文件当作文本来读,但也不起作用。请忽略代码注释,我把它们放进去是为了尝试一些代码的不同版本,而不必删除以前的版本。我相当肯定这个错误在上传功能的某个地方

注意:由于某些原因,StackOverflow无法正确显示我的代码。转到此url以获取完整的HTML代码:


我试了几个小时,但有些字符(+,但可能还有一些其他字符)一直在变为空格!我想不出是什么问题!如果我要上传原始和最终结果的MID文件,请告诉我。谢谢

快速查看源代码表明,当您不想使用javascript
escape
函数时,您正在使用该函数

查看源代码中的第80-90行,然后查看
escape
上的文档,问题应该很清楚:

编辑:1/2/13 我进一步研究了这个问题,我认为我上面的答案不是问题所在。我能够使用断点验证传递给上载函数的参数是否正确(即,我尝试使用包含“+”字符的文件名)

我无法在上载函数中使用断点进行测试,因为我没有您的u/p。然而,我仍然相信你会在上传功能中发现错误。具体来说,我将停止尝试手动构造查询字符串,就像您在这里所做的那样:

    var data = "";
    //data.append("filename", document.getElementById("filename0").value);
    data += "filename="+escape(document.getElementById("filename0").value);
    //data.append("username", document.getElementById("username").value);
    data += "&username="+escape(document.getElementById("username").value);
    //data.append("password", document.getElementById("password").value);
    data += "&password="+escape(document.getElementById("password").value);
    //data.append("public", document.getElementById("public").value);
    data += "&public="+escape(document.getElementById("public").value);
    //data.append("filebytes", escape(e.target.result));
    data += "&filebytes="+escape(e.target.result);
    //stdlog("Got result! Res: '''"+e.target.result+"'''");
相反,使用JSON构建数据,如下所示:

var data = {};
data.filename = escape(document.getElementById("filename0").value);//fixed coding error
// and so on for the other properties

试试看,如果它能解决您的问题,请告诉我。

是,stackoverflow可以正确显示您的代码。没有人想查看您的页面源代码。发布你代码的相关部分我试过了。StackOverflow的
和标记不会显示代码的一半。中间的部分,我认为我的问题是,不会显示,我的时间紧迫。请进一步解释。我尝试将所有转义调用替换为encodeURI调用,但这使最终结果变得越来越糟糕。我编写了一个Python程序来测试最终结果,但除非我在程序中出错,否则结果相差约298字节。请进一步解释,我可能有别的错误。谢谢另外,reader.result变量是不带空格的值。在它逃走之前我把它打印出来了。我想我可能会在不该调用reader.readAsBinaryString的时候调用reader.readAsBinaryString。明天我会仔细看看。好的,我会尝试添加,当我有机会时,我尝试添加它并将processData更改为true,因此$.ajax将处理字典,但没有成功。我想这可能只是FileReader的一些小故障,因为我确信FileReader出了问题。我应该试试reader.readAsArrayBuffer还是reader.readAsText?或者是我正在使用的Chrome出现了一些小问题?