|
Помогите пожалуйста загрузить эксель с яндекс диска | ☑ | ||
---|---|---|---|---|
0
breezee
10.11.21
✎
17:51
|
Коллеги, добрый день. Помогите пожалуйста загрузить эксель с ЯД. Получил токен и загружаю. Загрузку в инете нашел, работает, двочиные данные загружает, а вот сами двоичные данные сохраняются в табличный документ, но оптом не читаются. МОжет у Вас будет идея как починить? Нашел похожую тему, там автор не разобрался. Вот код загрузки
Я пытался записать двоичные данные в табличный документ - при чтении из временного файла ошибка, копироватьФайлы() не копирует, что делать не знаю) Подскажите, пожалуйста .... Файл = СкачатьФайл_яд("disk:/Test3.xls"); .... Функция СкачатьФайл_яд(Знач Путь) Экспорт ИмяСервера = "cloud-api.yandex.net"; ОтносительныйURL = "/v1/disk/resources/download?path=" + Путь; Заголовки = СформироватьЗаголовки(); HttpЗапрос = Новый HTTPЗапрос(ОтносительныйURL, Заголовки); HttpСоединение = Новый HTTPСоединение(ИмяСервера, 443,,,,, Новый ЗащищенноеСоединениеOpenSSL); HttpОтвет = HttpСоединение.Получить(HttpЗапрос); ТелоОтвета = HttpОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8); ОбработатьКодСостояния(HttpОтвет, ОтносительныйURL, ТелоОтвета); Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(ТелоОтвета); Ответ = ФабрикаXDTO.ПрочитатьJSON(Чтение); СтруктураURL = РазделитьURL(РаскодироватьСтроку(Ответ.href, СпособКодированияСтроки.КодировкаURL)); HttpСоединение = Новый HTTPСоединение(СтруктураURL.ИмяСервера, СтруктураURL.Порт,,,,, Новый ЗащищенноеСоединениеOpenSSL); HttpЗапрос = Новый HTTPЗапрос(СтруктураURL.Путь); HttpОтвет = HttpСоединение.Получить(HttpЗапрос); // редирект Пока HttpОтвет.КодСостояния = 302 Цикл СтруктураURL = РазделитьURL(HttpОтвет.Заголовки.Получить("Location")); HttpСоединение = Новый HTTPСоединение(СтруктураURL.ИмяСервера, СтруктураURL.Порт,,,,, Новый ЗащищенноеСоединениеOpenSSL); HttpЗапрос = Новый HTTPЗапрос(СтруктураURL.Путь, Заголовки); HttpОтвет = HttpСоединение.Получить(HttpЗапрос); КонецЦикла; ОбработатьКодСостояния(HttpОтвет, СтруктураURL.Путь); ДанныеФайла = HttpОтвет.ПолучитьТелоКакДвоичныеДанные(); //Адрес = ПоместитьВоВременноеХранилище(ДанныеФайла); //Возврат Адрес; Путь1 = HttpЗапрос.АдресРесурса; Путь2 = ПолучитьИмяВременногоФайла("xls"); КопироватьФайл(Путь1, Путь2); ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(Путь2,СпособЧтенияЗначенийТабличногоДокумента.Значение); //Попытка //COMОбъект = Новый COMОбъект("Excel.Application"); //Исключение // //НеУдалосьСформироватьПечатнуюФорму(ИнформацияОбОшибке()); //КонецПопытки; //ИмяВременногоФайла = ПолучитьИмяВременногоФайла("XLS"); //ДанныеФайла.Записать(ИмяВременногоФайла); // //Попытка // COMОбъект.Workbooks.Open(ИмяВременногоФайла); //Исключение // COMОбъект.Quit(0); // COMОбъект = 0; // УдалитьФайлы(ИмяВременногоФайла); // ВызватьИсключение(НСтр("ru = 'Ошибка при открытии файла шаблона.'") + Символы.ПС+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); //КонецПопытки; //Возврат Путь2; КонецФункции Процедура ОбработатьКодСостояния(Знач HttpОтвет, Знач ОтносительныйURL, Знач ТелоОтвета = "") Перем ТекстИсключения; Если (HttpОтвет.КодСостояния < 200) Или (HttpОтвет.КодСостояния >= 300) Тогда ТекстИсключения = "Запрос: " + ОтносительныйURL + Символы.ПС; ТекстИсключения = ТекстИсключения + "Код ответа: " + HttpОтвет.КодСостояния + Символы.ПС; ТекстИсключения = ТекстИсключения + "Тело ответа: " + ТелоОтвета; ВызватьИсключение ТекстИсключения; КонецЕсли; КонецПроцедуры Функция РазделитьURL(Знач URL) ИмяСервера = ""; Путь = ""; Протокол = ""; Порт = 443; URL = СокрЛП(URL); Если Лев(URL, 7) = "http://" Тогда URL = Прав(URL, СтрДлина(URL) - 7); Протокол = "http"; ИначеЕсли Лев(URL, 8) = "https://" Тогда URL = Прав(URL, СтрДлина(URL) - 8); Протокол = "https"; КонецЕсли; Индекс = СтрНайти(URL, "/"); Если Индекс Тогда ИмяСервера = Лев(URL, Индекс - 1); Путь = Сред(URL, Индекс); КонецЕсли; Индекс = СтрНайти(ИмяСервера, ":"); Если Индекс Тогда Порт = Число(Сред(ИмяСервера, Индекс + 1)); ИмяСервера = Лев(ИмяСервера, Индекс - 1); КонецЕсли; Результат = Новый Структура; Результат.Вставить("ИмяСервера", ИмяСервера); Результат.Вставить("Путь", Путь); Результат.Вставить("Протокол", Протокол); Результат.Вставить("Порт", Порт); Возврат Результат; КонецФункции Функция СформироватьЗаголовки() Токен = "AQAAAABaN1lFAAd-dyqXXCzwLkz8jjKn3CiFr7A"; //Перем Заголовки; Заголовки = Новый Соответствие; Заголовки.Вставить("Accept", "application/json"); Заголовки.Вставить("Content-Type", "application/json"); //Если ТекущаяДата() > СрокДействияТокена Тогда // Токен(); //КонецЕсли; Заголовки.Вставить("Authorization", "OAuth " + Токен); Возврат Заголовки; КонецФункции Токен рабочий, файл тоже. Инфа не конфиденциальная(прайс контрагента), аккаунт разовый для загрузки |
|||
1
garantNo4x
10.11.21
✎
17:58
|
ну попробуйте положить текстовый файл и скопировать ..
без загрузки в таблицу .. если файл вытягивается то это одан ситуация, если нет то другая |
|||
2
Kassern
10.11.21
✎
17:59
|
Вот тут у вас каша...
ДанныеФайла = HttpОтвет.ПолучитьТелоКакДвоичныеДанные(); //Адрес = ПоместитьВоВременноеХранилище(ДанныеФайла); //Возврат Адрес; Путь1 = HttpЗапрос.АдресРесурса; Путь2 = ПолучитьИмяВременногоФайла("xls"); КопироватьФайл(Путь1, Путь2); ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(Путь2,СпособЧтенияЗначенийТабличногоДокумента.Значение); ////////////////////////////////////// Получили вы двоичные данные в ДанныеФайла, а дальше то что? Что за путь 1 и путь 2? "КопироватьФайл" это не работает с https и зачем вообще тогда все написанное выше?) Вы можете получить временный файл и в него записать двоичные данные, а потом уже табдоком его открывать. |
|||
3
Kassern
10.11.21
✎
18:00
|
(2) и это при условии, что вы не накосячили ранее и в ДанныеФайла хранится действительно ДД.
|
|||
4
garantNo4x
10.11.21
✎
18:01
|
а вообще тут тема года полтора обсуждалась и тут был рабочий код по стягиванию файлов .. правда без загрузки в таблицу, но это второй момент
|
|||
5
breezee
10.11.21
✎
18:02
|
(2) Вот не открывается, тут каша, потому что пробовал по разному, сейчас уберу кашу и покажу код (4) Вот чет не нагуглил))
|
|||
6
breezee
10.11.21
✎
18:06
|
Вот так читает
..... // редирект Пока HttpОтвет.КодСостояния = 302 Цикл СтруктураURL = РазделитьURL(HttpОтвет.Заголовки.Получить("Location")); HttpСоединение = Новый HTTPСоединение(СтруктураURL.ИмяСервера, СтруктураURL.Порт,,,,, Новый ЗащищенноеСоединениеOpenSSL); HttpЗапрос = Новый HTTPЗапрос(СтруктураURL.Путь, Заголовки); HttpОтвет = HttpСоединение.Получить(HttpЗапрос); КонецЦикла; ОбработатьКодСостояния(HttpОтвет, СтруктураURL.Путь); ТабДок = Новый ТабличныйДокумент; ДанныеФайла = HttpОтвет.ПолучитьТелоКакДвоичныеДанные(); ВремФайл = ПолучитьИмяВременногоФайла("xls"); ДанныеФайла.Записать(ВремФайл); ТабДок2= новый ТабличныйДокумент; ТабДок2.Записать(ВремФайл, ТипФайлаТабличногоДокумента.XLS); ТабДок.Прочитать(ВремФайл,СпособЧтенияЗначенийТабличногоДокумента.Текст); Но табДок пустой получается |
|||
7
garantNo4x
10.11.21
✎
18:10
|
Скачать картинку с яндекс диска на пк Ут 10 вот тут кто то долго бился
|
|||
8
Ёпрст
10.11.21
✎
18:10
|
(0) просто ДанныеФайла.Записать("d:\123.xls")
|
|||
9
Ёпрст
10.11.21
✎
18:11
|
литл трейдинг.. салфетки гель для рук..
Короче, работает |
|||
10
breezee
10.11.21
✎
18:13
|
(8) А у Вас читает? У меня вот тут
ВремФайл = ПолучитьИмяВременногоФайла("xls"); ДанныеФайла.Записать(ВремФайл); ТабДок2= новый ТабличныйДокумент; ТабДок2.Записать(ВремФайл, ТипФайлаТабличногоДокумента.XLS); ТабДок.Прочитать(ВремФайл,СпособЧтенияЗначенийТабличногоДокумента.Текст); ТабДок пустой, доступа просто к серверу нет посмотреть что там, сейчас порошу чтобы файл скинули |
|||
11
Ёпрст
10.11.21
✎
18:14
|
(10) ну, файло на диске открылось экселем
|
|||
12
Ёпрст
10.11.21
✎
18:14
|
а в моксель я его не выводил..
|
|||
13
polosov
10.11.21
✎
18:14
|
Токен = "AQAAAABaN1lFAAd-dyqXXCzwLkz8jjKn3CiFr7A";
Заголовки = Новый Соответствие; Заголовки.Вставить("Accept", "application/json"); Заголовки.Вставить("Content-Type", "application/json"); Заголовки.Вставить("Authorization", "OAuth " + Токен); Результат = ОбщийМодуль2.GetJson("https://cloud-api.yandex.net/v1/disk/resources/download?path=disk:/Test3.xls", Неопределено, Новый Структура("Заголовки", Заголовки)); ПутьДляСкачивания = Результат.Получить("href"); Результат = ОбщийМодуль2.Get(ПутьДляСкачивания); Результат.Тело.Записать(ПутьДляСохранения + "\111.xls"); |
|||
14
polosov
10.11.21
✎
18:15
|
В ОбщийМодуль2 засовываешь это https://github.com/vbondarevsky/Connector/blob/master/src/ru/CommonModules/КоннекторHTTP/Ext/Module.bsl
|
|||
15
breezee
10.11.21
✎
18:21
|
(14) (13) Спасибо большое, но у меня не прочиталось
Токен = "AQAAAABaN1lFAAd-dyqXXCzwLkz8jjKn3CiFr7A"; Заголовки = Новый Соответствие; Заголовки.Вставить("Accept", "application/json"); Заголовки.Вставить("Content-Type", "application/json"); Заголовки.Вставить("Authorization", "OAuth " + Токен); Результат = GetJson("https://cloud-api.yandex.net/v1/disk/resources/download?path=disk:/Test3.xls", Неопределено, Новый Структура("Заголовки", Заголовки)); ПутьДляСкачивания = Результат.Получить("href"); Результат = Get(ПутьДляСкачивания); ПутьДляСохранения = ПолучитьИмяВременногоФайла("xls"); Результат.Тело.Записать(ПутьДляСохранения); ТабДок = Новый ТабличныйДокумент; ТабДок.Прочитать(ПутьДляСохранения,СпособЧтенияЗначенийТабличногоДокумента.Текст); Вот так сделал, пишет по причине: Ошибка при выполнении файловой операции 'C:\Users\USR1CV8\AppData\Local\Temp\v8_D7E4_1aa.xls'. Доступ к файлу не может быть получен. Может у меня просто какие-то проблемы со чтением экселя? На сервере экселя нет. Другие эксели которые через копироватьфайл() нормально читаются |
|||
16
polosov
10.11.21
✎
18:22
|
(15) У тебя файл на сервере возможно.
|
|||
17
breezee
10.11.21
✎
18:22
|
(16) Да, он на сервере, код серверный
|
|||
18
polosov
10.11.21
✎
18:23
|
Хотя нет. Ты же временный создал.
|
|||
19
Kassern
10.11.21
✎
18:23
|
(10) вы хоть понимаете, что вы тут пишите? У табдока есть замечательный метод прочитать.
|
|||
20
breezee
10.11.21
✎
18:24
|
(19) Я читаю и получается пустой табдок
|
|||
21
breezee
10.11.21
✎
18:25
|
(13) А у Вас эксель сохраняется?
|
|||
22
polosov
10.11.21
✎
18:25
|
Файл кривой. Его не может прочитать ТабличныйДокумент.
|
|||
23
polosov
10.11.21
✎
18:26
|
(21) Файл ОпенОфисом открывается. Да ексель. Но формат какой-то другой.
|
|||
24
breezee
10.11.21
✎
18:29
|
(23) Спасибо большоре не знал
|
|||
25
breezee
10.11.21
✎
18:32
|
А может из-за картинок такое быть?
|
|||
26
polosov
10.11.21
✎
18:33
|
(25) Может, а может пересохранить файл в xlsx перед выкладыванием поможет.
|
|||
27
breezee
10.11.21
✎
18:36
|
Спасибо большое за помощь всеа, пойду спать
|
|||
28
Fram
10.11.21
✎
18:37
|
(6) вот это нахрена?
ТабДок2= новый ТабличныйДокумент; ТабДок2.Записать(ВремФайл, ТипФайлаТабличногоДокумента.XLS); |
|||
29
Fram
10.11.21
✎
18:45
|
Записываешь пустой табдок в файл, читаешь его, и удивляешься что он пустой 🤦♂️
|
|||
30
breezee
10.11.21
✎
18:52
|
(29) да чёт не знал уже что делать))
|
|||
31
Смотрящий
10.11.21
✎
19:43
|
А какой размер файла то читаешь ?
|
|||
32
Смотрящий
10.11.21
✎
19:43
|
который читаешь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |