所以我使用第三方服务来编辑我的XML
存储在服务器路径上的文件。现在,一旦我完成编辑XML
,我将文件保存到本地内存存储,该存储生成附加到 URL 的 BLOB。
Example:
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
or 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
bucket.
再次编辑:
所以,目前我已经保存了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 默认启用请求验证设置为 false,以帮助防止 XSS。
[HttpPost]
[ValidateInput(false)]
public ActionResult SendXMLToS3(string json)
但同样的 500 错误仍然存在:jquery.min.js:4 POST http://localhost/DEGit/Home/SendXMLToS3 500 (Internal Server Error)
in the h.send(c.hasContent&&c.data||null)
method.
我怎么能够:
- 读取生成的
blob
C# 中的 URL 内容?
- 发送
test
通过 AJAX 到 C# 的字符串?
- 还有什么大家可以建议的。
Thanks