因此,我正在使用第三方服务,该服务可让我编辑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
as保存为字符串,并且尝试通过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
C#中生成的URL内容?test
通过AJAX将字符串发送到C#吗?谢谢
正如您在评论中所要求的:我制作了简单的控制器和JS代码,以httppost
使用ajax在控制器内命中一个方法:
[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",
引起了Internal 500错误,如果将其删除,应该没问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句