【发布时间】:2011-10-06 21:57:56
【问题描述】:
我有一个带有按钮的 ASP.Net 网站,这些按钮将文件路径传递给 javascript 函数,该函数执行对 web 方法的 ajax 调用。您在下面看到的传递给 openDoc 的文件路径是 JSON.stringify(\fs01\Documents...)
的结果 <input type="button" id="b0" value="Open" onclick="openDoc('"\\\\fs01\\Documents\\2011\\MEASEJA\\1108030203 (1) 10-3-2011 Mart Cart Service Completion Survey.pdf"');">
function openDoc(filename) {
var xml = new XMLHttpRequest();
xml.open("POST", "Default.aspx", true);
xml.onreadystatechange = function () {
if (xml.readyState == 4) {
if (xml.status == 200) {
$.ajax({
type: "POST",
dataType: "json",
contentType: "application/json",
url: "Service.asmx/openDoc",
data: '{ file:' + filename + '}',
success: function () { },
error: function (xml, status, error) {
var err = eval("(" + xml.responseText + ")");
alert("Open Doc: " + xml.Message);
}
});
}
}
}
xml.send(null);
}
[WebMethod]
public byte[] openDoc(string file)
{
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
byte[] buffer;
try
{
int length = (int)fs.Length;
buffer = new byte[length];
int count;
int sum = 0;
while ((count = fs.Read(buffer, sum, length - sum)) > 0)
sum += count;
}
catch (Exception ex)
{
throw (ex);
}
finally
{
fs.Close();
}
return buffer;
}
问题是,在此过程中,文件路径中的 \ 发生了一些事情,并使用 firebug 从 ajax 调用接收到这样的错误:
"无法识别的转义序列。(16): { file:"\fs01\Documents\2011\MEASEJA\1108030203 (1) 10-3-2011 Mart Cart Service Completion Survey.pdf"}"
我知道在 C# 中您必须将所有 \ 加倍,但这就是文件路径从按钮单击开始的方式。在某个地方,我丢失了额外的 \ 并且 C# 无法将其作为文件处理。
【问题讨论】:
标签: c# javascript json