因此,我正在使用第三方服务,该服务使我可以编辑存储在服务器路径上的XML
文件。现在,一旦完成XML
的编辑,我便将该文件保存到本地存储器中,该存储器会生成附加到URL的BLOB。
示例:
blob:http://localhost/0e06af7a-a1a9-4bf1-a79a-78a1e107648f
0e06af7a-a1a9-4bf1-a79a-78a1e107648f
是为当前编辑创建的标记。现在,当我在浏览器中运行上述URL时,可以看到:
我的问题是:如何使用C#读取上述URL,然后将内容保存到对象中,以后再用于上载到文件或云中。我尝试使用WebClient
:
WebClient client = new WebClient();
Stream stream = client.OpenRead("blob:http://localhost/0e06af7a-a1a9-4bf1-a79a-78a1e107648f");
StreamReader reader = new StreamReader(stream);
string str= reader.ReadToEnd();
但是它给我一个错误,说URL
不正确,应该以HTTP
或HTTPS
开头。
编辑:我能够使用JQuery将Blob保存到文件中:
var download = $('<a>Download ' + "file.xml" + '</a>').attr("href", "blob:http://localhost/0e06af7a-a1a9-4bf1-a79a-78a1e107648f");
download.attr("download", "file.xml");
这将成功创建一个名为file.xml
的文件并下载该文件。我希望将此blob内容保存在服务器端,以便可以将其发送到Amazon S3
存储桶。
再次编辑:
因此,当前我将XML
保存为字符串,我试图通过AJAX将其发送到C#控制器,但遇到500内部服务器错误。
var xmlString = self.xml2Str(self.xmlState.xml);
//console.log(xmlString);
var blob = new Blob([xmlString], { type: "text/xml" });
console.log(blob);
var url = URL.createObjectURL(blob);
console.log(url);
var json = {
xmlString: xmlString
};
var test = JSON.stringify(json);
console.log(test);
try {
$.ajax({
url: BaseURL + "Home/SendXMLToS3",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: { "json": test},
type: "POST",
success: function (data) {
//TODO: Add whatever if you want to pass a notification back
alert("Done");
},
error: function (error) {
//TODO: Add some code here for error handling or notifications
alert("Not Done");
}
});
}
catch (err) {
console.log(err);
}
test
变量的内容如下(从控制台):
{"xmlString":"<nitf>\n <head>\n <docdata>\n <identified-content>\n <classifier id=\"box-geometry\" value=\"147,623,250,790\" />\n <classifier id=\"uuid\" value=\"Mv8XVAViEeqyc3SUunSxMg\" />\n </identified-content>\n </docdata>\n </head>\n <body>\n <body.head />\n <body.content>\n <p>\n <lang fontStyle=\"regular\" style=\".Bodylaser\">How is this different from Pegasus?</lang>\n </p>\n <p>\n <lang fontStyle=\"regular\" style=\".Bodylaser\">Pegasus could be installed on your phone without your knowledge through just a missed WhatsApp video call. In the case of the new breach, a user has to manually download the MP4 file sent to them before any malicious code can be run. The problem is not with WhatsApp’s end-to-end encryption feature here. Getting remote access to your phone is the equivalent of actually holding it in one’s hand. End-to-end encryption is meant to stop attackers from stealing or snooping on chats in between. So, unless someone has access to your device, they can’t actually read your chats, even if they intercept them.</lang>\n </p>\n </body.content>\n </body>\n</nitf>"}
还尝试设置默认的ASP.NET,默认情况下启用了请求验证,以帮助防止XSS设置为false。
[HttpPost]
[ValidateInput(false)]
public ActionResult SendXMLToS3(string json)
仍然存在相同的500错误:jquery.min.js:4 POST http://localhost/DEGit/Home/SendXMLToS3 500 (Internal Server Error)
方法中的h.send(c.hasContent&&c.data||null)
。
我如何:
blob
URL内容吗?test
字符串发送到C#吗?谢谢
您在注释中要求的:我制作了简单的控制器和JS代码,使用ajax在控制器内命中了httppost
方法:
[HttpPost]
public JsonResult SendXMLToS3(string json)
{
return Json(new { Result = "PASS", Message = "testing SendXMLToS3" });
}
<script type="text/javascript">
function myfunction() {
var test = { "xmlString": "<nitf>...</nitf>" };
$.ajax({
type: "post",
url: "/Home/SendXMLToS3",
dataType: "json",
data: { "json": test },
success: function (res) {
alert(res.Message);
},
error: function (res) {
//TODO: Add some code here for error handling or notifications
alert("Not Done");
}
});
}
</script>
发现:contentType: "application/json; charset=utf-8",
行引起内部500错误,如果删除它,应该没问题。