Генерация пути в памяти для сохраненного документа XML и подача на AJAX для отображения - PullRequest
0 голосов
/ 04 февраля 2020

Итак, я столкнулся со всеми видами CORS ошибок (при использовании HTTPS) и Not allowed to load local resource: file:///C:/Windows/TEMP/e3ef26_75603_4.xml при сохранении моего файла во временную папку и последующей попытке обработать запрос через AJAX для отображения на моем браузер.

В основном сценарий таков, что я запрашиваю файл из S3 корзины. Теперь я попробовал пару вещей:

Путем прямого указания полного пути к файлу (HTTPS) с соответствующим сегментом и именем файла для вызова AJAX. Для этого сначала нужно сгенерировать путь к файлу в методе 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 имеет доступ publi c и политики CORS существуют для корзины.

Проблема: при использовании этого метода в корзине S3, у которой нет доступа publi c и политики CORS, вы не получите 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 файлы и затем читаю из этого места. В основном это будет папка временного сервера, но тогда мне нужно будет следить за постоянно увеличивающимся размером.

Заранее спасибо

1 Ответ

0 голосов
/ 04 февраля 2020

Вместо того, чтобы предварительно сгенерировать файл, я бы порекомендовал сгенерировать файл по запросу. В тот момент, когда пользователь отправляет запрос ajax для файла, файл будет сгенерирован в памяти, преобразован в байтовый массив, возвращен клиенту (в виде строки в кодировке base64) и загрузка начнется в конце клиента.

...