0

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

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

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

4

1 回答 1

1

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

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

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

编辑:2013 年 1 月 2 日

我对此进行了更多研究,我认为我上面的答案不是问题。我能够使用断点验证传递给您的上传函数的参数是否正确(即,我尝试使用包含“+”字符的文件名)。

我无法在上传功能中使用断点进行测试,因为我没有你的 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

试试看,让我知道它是否能解决您的问题。

于 2012-12-31T03:00:44.380 回答