Поэтому я использую сторонний сервис, который позволяет мне редактировать мой XML
файл, который хранится на пути к серверу. Теперь, когда я закончу редактирование XML
, я сохраняю файл в локальном хранилище, которое генерирует BLOB-объект, добавленный к URL-адресу.
Пример:
blob:http://localhost/0e06af7a-a1a9-4bf1-a79a-78a1e107648f
Где 0e06af7a-a1a9-4bf1-a79a-78a1e107648f
- токен, созданный для текущего редактирования. Теперь, когда я запускаю вышеупомянутый URL в браузере, я вижу:
Мой вопрос: как я могу прочитать вышеуказанный URL, используя C# и затем сохранить содержимое в объект, который я могу позже использовать для загрузки в файл или облако. Я пытался использовать 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
.
Редактировать: я могу сохранить BLOB-файл в файл, используя JQuery:
var download = $('<a>Download ' + "file.xml" + '</a>').attr("href", "blob:http://localhost/0e06af7a-a1a9-4bf1-a79a-78a1e107648f");
download.attr("download", "file.xml");
Это успешно создает файл с именем file.xml
и загружает файл. Я хочу сохранить содержимое этого блоба на стороне сервера, чтобы я мог отправить его в Amazon S3
корзину.
Снова редактирование:
Итак, в настоящее время я сохранил XML
в виде строки и пытаюсь отправить его на контроллер C# через AJAX, но работаю в 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 ложь.
[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-адрес в C#? - Отправьте строку
test
через AJAX в C#? - Все остальное, что вы, ребята, ребята могу предложить.
Спасибо