为什么我的JavaScript代码无法成功上传我的文件?

时间:2012-12-31 02:24:35

标签: javascript jquery filereader

好的,我有这个JavaScript代码。它使用FileReader对象上载文件。但每当我尝试上传一个包含字符+字符的MID文件时,它就会将其更改为空格!我知道错误不在服务器端脚本中,因为我在FileReader读取我的MID文件后立即检出了客户端上的数据,它与上传的最终结果相同。我尝试将文件作为文本阅读,但这也无法正常工作。请忽略代码注释,我将它们放入尝试不同版本的某些代码,而不必删除以前的代码。我很确定错误是在上传功能中的某个地方。

注意:由于某种原因,StackOverflow无法正确显示我的代码。转到此网址即可获取完整的HTML代码:http://uploadfilez.tommy3244.com/cgi-bin/index.cgi

我尝试了几个小时的几件事,但是有些角色(+,但可能还有其他角色)不断变成一个空间!我无法弄清楚问题是什么!如果我应该上传原始和最终结果的MID文件,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

快速查看源代码表明您在不希望使用javascript escape函数时。

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

http://www.w3schools.com/jsref/jsref_escape.asp

编辑: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

尝试并告诉我它是否能解决您的问题。