为保存的 XML 文档生成内存中路径,并提供给要显示的 AJAX



所以,我一直遇到各种CORS错误(使用 HTTPS 时(和Not allowed to load local resource: file:///C:/Windows/TEMP/e3ef26_75603_4.xml将我的文件保存到临时文件夹然后尝试通过 AJAX 提供请求以显示在我的浏览器上。

基本上,情况是我正在从S3存储桶请求文件。现在我尝试了几件事:

通过直接向AJAX调用提供具有关联存储桶和文件名的完整文件路径 (HTTPS(。这是通过首先在Controller方法上生成文件路径并分配一个ViewBag变量来完成的。像这样:

ViewBag.currentURL = JsonConvert.SerializeObject(tempfilepath);

和关联的 AJAX:

$(function executeXML() {            
//console.log('@Html.Raw(ViewBag.currentURL)');
$("#myeditor").execute({
ajaxOptions: {
pathtoxml: @Html.Raw(ViewBag.currentURL)
},
});
});

S3存储桶具有公有访问权限并且存储桶存在CORS策略时,此方法非常有效。

问题:在没有公有访问权限和CORS策略的S3存储桶上使用此方法将导致来自任何浏览器的No 'Access-Control-Allow-Origin' header is present on the requested resource

叹息!但还没有,

我尝试做的第二种方法是读取服务器端的文件并将其保存到 XML 文档中。现在,当我想保存此 XML 文档时,我使用临时文件夹来保存我的文件。像这样:

using (WebClient client = new WebClient())
{
string myXMLString = client.DownloadString(fullpathstory);
XmlDocument xml = new XmlDocument();
xml.LoadXml(myXMLString); // suppose that myXmlString contains "<Names>...</Names>"
//Now save the file to temp folder
tempfilepath = Path.Combine(Path.GetTempPath(), filename);
xml.Save(tempfilepath);
}

这给了我一条路径,如下所示:file:///C:/Windows/TEMP/e3ef26_75603_4.xml

现在,当我将此路径发送到我的AJAX时,它给了我错误jquery.min.js:4 Not allowed to load local resource: file:///C:/Windows/TEMP/e3ef26_75603_4.xml这是非常明显和预期的。

问:我正在寻找一种方法将 XML 文档保存在内存中,并生成可由我的AJAX调用读取并在浏览器上提供的路径或流。

有没有这样的方法,或者我是否需要创建一个适当的文件服务器,在其中存储所有生成的XML文件,然后从该位置读取。它基本上是一个临时服务器文件夹,但随后我需要继续监视它不断增加的大小。

提前致谢

与其预先生成文件,我建议按需生成文件。当用户发出ajax文件请求时,文件将在内存中生成,转换为字节数组,返回到客户端(作为base64编码字符串(,下载将从客户端开始。

最新更新