href:blob...

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
855
Благодарностей
246
Баллы
43
Подскажите, пожалуйста, как можно получить содержимое по гиперссылке вида:
blob:https://5.145.12.11/568233a1-8b13-48b3-84d5-cca045ae384f ?

в браузере при нажатии на такую ссылку происходит скачивание файла.
В зенке при нажатии на такую ссылку не происходит ничего. В трафике тоже нет ничего, понимаю, что нужные данные уже скачаны и просто JS'ом отдаются в виде файла.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
В трафике тоже нет ничего, понимаю, что нужные данные уже скачаны и просто JS'ом отдаются в виде файла.
Собственно, blob'ы обычно уже хранят в себе файл, например, картинку. Нужен только скрипт который его сохранит.
https://stackoverflow.com/questions/23451726/saving-binary-data-as-file-using-javascript-from-a-browser
 
Последнее редактирование:

andrey-ka

Client
Регистрация
03.06.2018
Сообщения
855
Благодарностей
246
Баллы
43
Спасибо.
Разобрался, зенка его скачивает как файл и помещает в "папка для загрузки".
Я ее задаю через кубик и потом в ней ищу нужный файл.
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
  • Спасибо
Реакции: andrey-ka

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Собственно, blob'ы обычно уже хранят в себе файл, например, картинку. Нужен только скрипт который его сохранит.
https://stackoverflow.com/questions/23451726/saving-binary-data-as-file-using-javascript-from-a-browser
А есть решение на шарпе как сохранять картинки из таких ссылок? Не понимаю как скрипт использовать или привязать к коду C#
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Добавляешь кубик Свой JavaScript код (выполнять: при создании окна страницы, всё время, во всех вкладках):
JavaScript:
window.my_func_name = function(first, second) {
    return first + second + ".000";
};
Потом из C# делаешь вызов:
C#:
int csharp_first = 10;
int csharp_second = 20;
string data = instance.ActiveTab.MainDocument.EvaluateScript("return window.my_func_name(" + csharp_first + ", " + csharp_second +");");
И получаешь результат в переменной data.
Вроде всё так должно работать )
 
  • Спасибо
Реакции: orka13 и radv

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
А без кубика можно обойтись?
Как-то так примерно:
C#:
int csharp_first = 10;
int csharp_second = 20;
string data = instance.ActiveTab.MainDocument.EvaluateScript("(function(first, second) {return first + second + ".000";})(" + csharp_first + ", " + csharp_second +");");
PS: у EvaluateScript ещё есть третий параметр altWay - если вдруг код не будет выполняться, то стоит попробовать его выставить в true.
 
  • Спасибо
Реакции: radv

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Как-то так примерно:
я правильно понимаю, что в
C#:
function(first, second)
Это вызов функции с нужными параметрами?
Имя функции надо указывать?

а в
C#:
{return first + second + ".000";}
ее тело для выполнения?
то что между фигурными скобками с return в начале и имя функции тогда указывать не обязательно

а в этом коде передаются сами значения входных параметров с + по краям?
C#:
(" + csharp_first + ", " + csharp_second +");
и если у меня функция
HTML:
function downloadFile(blobUrl, fileName) {
    const blob = new Blob(blobUrl, { type: "image/jpeg" });
    const url = window.URL.createObjectURL(blob);
    const a = document.createElement("a");

    a.href = url;
    a.download = fileName;

    a.click;

    a.remove();

    document.addEventListener("focus", w => { window.URL.revokeObjectURL(blob) });
}
то код будет таким
C#:
string data = instance.ActiveTab.MainDocument.EvaluateScript("(function(blobUrl, fileName) {return ВСЕ тело функции, например из переменной})(" + Параметр 1 для blobUrl+ ", " + Параметр 2 для fileName +");");
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Это вызов функции с нужными параметрами?
Да

Имя функции надо указывать?
Когда вокруг определения функции стоят круглые скобки и вызов идет сразу после функции, то имя не нужно указывать (или нельзя, не знаю точно).

ее тело для выполнения?
Да

а в этом коде передаются сами значения входных параметров с + по краям?
Да, символ "+" тут нужен как конкатенация в C#. Можно использовать String.Format и передавать через него, тогда не нужно будет конкатенацию делать.

то код будет таким
Вроде как да, визуально выглядит что всё окей, нужно уже тестировать.
Но вначале нужно будет убедиться что этот код рабочий, а сделать это очень просто - через кубик "Свой JavaScript код" (выполнять: на текущей странице), просто там и определение функции вписать и её вызов. Можно даже в таком же стиле как тут (как передаем в метод EvaluateScript).

PS: если что - не обязательно в одну строчку запихивать тело функции.

Update: только сейчас заметил - там return необязательный, и тело функции должно быть как в примере на JS выше, return НЕ должен стоять перед началом функции!!!

Неправильно:
C#:
string data = instance.ActiveTab.MainDocument.EvaluateScript("(function(blobUrl, fileName) {return ВСЕ тело функции, например из переменной})(" + Параметр 1 для blobUrl+ ", " + Параметр 2 для fileName +");");
Правильно:
C#:
string data = instance.ActiveTab.MainDocument.EvaluateScript("(function(blobUrl, fileName) {ВСЕ тело функции, например из переменной, в том числе в конце МОЖЕТ быть return что-то;})(" + Параметр 1 для blobUrl+ ", " + Параметр 2 для fileName +");");
 
  • Спасибо
Реакции: radv

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Вроде как да, визуально выглядит что всё окей, нужно уже тестировать ) Но вначале нужно будет убедиться что этот код рабочий, а сделать это очень просто - через кубик "Свой JavaScript код" (выполнять: на текущей странице), просто там и определение функции вписать и её вызов. Можно даже в таком же стиле как тут (как передаем в метод EvaluateScript).

PS: если что - не обязательно в одну строчку запихивать тело функции.
Благодарю, с этим уже понятнее куда двигаться дальше. Проверить работу функции скрипта это само собой :-) иначе можно просто нерабочий код тестировать.:dy:
 

Lord_Alfred

Client
Регистрация
09.10.2015
Сообщения
3 916
Благодарностей
3 867
Баллы
113
Благодарю, с этим уже понятнее куда двигаться дальше.
Напиши потом тут, пожалуйста, итоговое решение как скачать blob.
Думаю, многим в будущем это пригодится :-)
 
  • Спасибо
Реакции: radv

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Напиши потом тут, пожалуйста, итоговое решение как скачать blob.
Думаю, многим в будущем это пригодится :-)
Сначала надо скрипт сделать и отладить, а потом выложу свой рабочий вариант.
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 788
Благодарностей
1 952
Баллы
113
Спасибо.
Разобрался, зенка его скачивает как файл и помещает в "папка для загрузки".
Есть рабочий вариант скачивания blob ссылки? Может мне тогда меньше свои скрипты писать/искать и отлаживать придется )
 

baracuda

Client
Регистрация
19.06.2013
Сообщения
793
Благодарностей
278
Баллы
63
Всем привет. Тоже столкнулся с blob. но задача наоборот, загрузить в яндекс картинки файл изображения... может кто то подскажет с какой стороны подойти.
спасибо.
94850
 

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 777
Благодарностей
1 448
Баллы
113
  • Спасибо
Реакции: radv

Кто просматривает тему: (Всего: 2, Пользователи: 0, Гости: 2)