Показать сообщение отдельно
  #30 (permalink)  
Старый 08.03.2021, 17:15
Интересующийся
Отправить личное сообщение для karaul Посмотреть профиль Найти все сообщения от karaul
 
Регистрация: 17.02.2021
Сообщений: 27

Новый улучшайзинг. Чего-то фундаментального не знаю.

Добавлена кнопка загрузки данных с внешнего независимого сайта - это элементы URL и download по ссылке

https://karaul.github.io/fitplotter/

Исполняется такой код (схематично)

fileUrl = "https://connect.garmin.com/proxy/download-service/files/activity/";
// id = xxxxxxxx  mist be provided bу user
var downloadUrl = fileUrl + id;
window.location.href = downloadUrl;
// now there appears save as dialog


Приходит двоичный файл и на его прием появляется системный диалог save as. Я файл сохраняю, а потом открываю его как локальный. Всё работает.

Как перехватить бинарные данные посланные в этот диалог save as и сразу пустить эти данные в обработку, чтобы не сохранять файл и потом не открывать его заново ?

Как сделать так тобы диалог save as не открывать, но данные получить

Я попробовал заменить window.location.href = downloadUrl который приводит к диалогу на XMLHttpRequest типа (сроки 13-25 чтобы создать свой диалог)
let id = document.getElementById('downloadURL').value.split("/").slice(-1);
		let  downloadUrl = fileUrl + id;
		//console.log(downloadUrl);
		// to download the current id 
		//window.location.href = downloadUrl;
		let xhr = new XMLHttpRequest();			
		xhr.onload = function (e) {
			if (this.readyState  === 4) {
				if (this.status === 200) {
					const blob = new Uint8Array(this.response);
					//parseBLOB(blob);
					// [url]https://stackoverflow.com/questions/22724070/prompt-file-download-with-xmlhttprequest[/url]
					let fileName = 'test.zip';
					window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
					window.requestFileSystem(window.TEMPORARY, 1024 * 1024, function (fs) {
						fs.root.getFile(fileName, { create: true }, function (fileEntry) {
							fileEntry.createWriter(function (fileWriter) {
								fileWriter.addEventListener("writeend", function () {
									window.location = fileEntry.toURL();
								}, false);
								fileWriter.write(blob, "_blank");
							}, function () { });
						}, function () { });
					}, function () { });					
				 }			
				 if (this.status === 404) {
					 const  filename = document.getElementById("files").value;
					 errorNoFile("status 404",filename, 1);	
				 }
			}			 
		};


и оказалось что так нельзя
index.html:1 Access to XMLHttpRequest at 'https://connect.garmin.com/proxy/download-service/files/activity/6277409729' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.


Какие еще способы, как получить данные ? Эти данные сайт мне посылает сразу же, когда я просто ввожу в адрес сайта downloadUrl - появляется диалог - но как их перехватить в программе ?

Спасибо
Ответить с цитированием