好的,我有这个JavaScript代码。它使用FileReader对象上载文件。但每当我尝试上传一个包含字符+字符的MID文件时,它就会将其更改为空格!我知道错误不在服务器端脚本中,因为我在FileReader读取我的MID文件后立即检出了客户端上的数据,它与上传的最终结果相同。我尝试将文件作为文本阅读,但这也无法正常工作。请忽略代码注释,我将它们放入尝试不同版本的某些代码,而不必删除以前的代码。我很确定错误是在上传功能中的某个地方。
注意:由于某种原因,StackOverflow无法正确显示我的代码。转到此网址即可获取完整的HTML代码:http://uploadfilez.tommy3244.com/cgi-bin/index.cgi
我尝试了几个小时的几件事,但是有些角色(+,但可能还有其他角色)不断变成一个空间!我无法弄清楚问题是什么!如果我应该上传原始和最终结果的MID文件,请告诉我。谢谢!
答案 0 :(得分:1)
快速查看源代码表明您在不希望使用javascript escape
函数时。
查看源代码中的第80-90行,然后查看escape
上的文档,问题应该清楚:
http://www.w3schools.com/jsref/jsref_escape.asp
我对此进行了更多研究,我认为上面的答案不是问题所在。我能够使用断点验证传递给您的上传函数的参数是否正确(即,我尝试使用包含“+”字符的文件名)。
我无法使用上传功能中的断点进行测试,因为我没有你的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
尝试并告诉我它是否能解决您的问题。