|
(1С PUT) Загрузка на яндекс диск командой PUT из 1С | ☑ | ||
---|---|---|---|---|
0
assest
08.12.15
✎
11:23
|
Метод КопироватьФайл() перестал работать на яндекс-диске
Поэтому я сново возвращаюсь к впоросу загрузки на ЯД методоми WebDav Вот код из 1С Путь = "D:\Новая папка\1.txt"; Файл = Новый Файл(Путь); Токен = "Мой токен"; Соединение = новый HTTPСоединение("webdav.yandex.ru",443,,,,,Новый ЗащищенноеСоединениеOpenSSL); //cloud-api.yandex.net Заголовки = Новый Соответствие; Заголовки.Вставить("Accept","*/*"); Заголовки.Вставить("Authorization", "OAuth "+Токен); Заголовки.Вставить("Etag", ХЕШMD5 (Путь)); Заголовки.Вставить("Sha256", ХЕШ (Путь)); Заголовки.Вставить("Content-Type", "text/html; charset=UTF-8"); Заголовки.Вставить("Expect", "100-continue"); Запрос = Новый HTTPЗапрос("/catalog/",Заголовки); // HTTP/1.1 Запрос.УстановитьТелоИзСтроки(Base64Строка(Новый ДвоичныеДанные(Путь))); Ответ = Соединение.ВызватьHTTPМетод("PUT", Запрос); Сообщить( Ответ.КодСостояния ); //------------------------------------------------------ Что перехватывает фидлер PUT https://webdav.yandex.ru/catalog/ HTTP/1.1 User-Agent: 1C+Enterprise/8.3 Host: webdav.yandex.ru Content-Type: text/html; charset=UTF-8 Expect: 100-continue Etag: C4 CA 42 38 A0 B9 23 82 0D CC 50 9A 6F 75 84 9B Sha256: 6B 86 B2 73 FF 34 FC E1 9D 6B 80 4E FF 5A 3F 57 47 AD A4 EA A2 2F 1D 49 C0 1E 52 DD B7 87 5B 4B Authorization: OAuth Мой токен Accept: */* Content-Length: 7 ?MQ== HTTP/1.1 405 Method Not Allowed Yandex-Cloud-Request-ID: dav-DN2B_23B_GQ-1-webdav4h Server: MochiWeb/1.0 Keep-Alive: timeout=300 Date: Tue, 08 Dec 2015 07:54:32 GMT Content-Length: 33 Cannot perform PUT on collection |
|||
1
assest
08.12.15
✎
11:27
|
Код возврта 405, указанный клиентом метод нельзя применить к текущему ресурсу. В руководстве разработчика для Яндекс диска(https://api.yandex.ru/disk/doc/dg/yandex-disk-dg.pdf) описан метод PUT
|
|||
2
Garykom
гуру
08.12.15
✎
11:30
|
Выкинуть эту каку... юзать FTP в вариациях
|
|||
3
assest
08.12.15
✎
11:35
|
(2) Здесь стоит вопрос как заставить это работать, а не какой выбрать ресурс для хранения данных
|
|||
4
assest
08.12.15
✎
11:35
|
Может кто-нибудь на вскидку видит ошибку в моем запросе или коде
|
|||
5
Seducer
08.12.15
✎
11:44
|
Вроде в демке БСП 2.3.2 есть пример работы с яндекс.диском
|
|||
6
vhl
08.12.15
✎
11:45
|
(4) Написано же: PUT /a/otpusk.avi
а ты что делаешь? |
|||
7
vhl
08.12.15
✎
11:47
|
Я думаю надо: Запрос = Новый HTTPЗапрос("/catalog/1.txt",Заголовки);
|
|||
8
assest
08.12.15
✎
11:48
|
(7) А адрес сервера как передать?
|
|||
9
assest
08.12.15
✎
11:49
|
Вопрос снят
|
|||
10
assest
08.12.15
✎
12:00
|
PUT https://webdav.yandex.ru/catalog/1.txt HTTP/1.1
User-Agent: 1C+Enterprise/8.3 Host: webdav.yandex.ru Content-Type: text/html; charset=UTF-8 Expect: 100-continue Etag: C4 CA 42 38 A0 B9 23 82 0D CC 50 9A 6F 75 84 9B Sha256: 6B 86 B2 73 FF 34 FC E1 9D 6B 80 4E FF 5A 3F 57 47 AD A4 EA A2 2F 1D 49 C0 1E 52 DD B7 87 5B 4B Authorization: OAuth МойТокен Accept: */* Content-Length: 7 ?MQ== HTTP/1.1 400 Bad Request Yandex-Cloud-Request-ID: dav-DN2h_42W_4PE-1-webdav6j Server: MochiWeb/1.0 Keep-Alive: timeout=300 Date: Tue, 08 Dec 2015 08:59:32 GMT Content-Length: 0 (7)вот это выглядит ошибка таже |
|||
11
mistеr
08.12.15
✎
12:17
|
(4) Ошибку тебе сказали: "Cannot perform PUT on collection". URL неверный.
|
|||
12
mistеr
08.12.15
✎
12:18
|
(10) Ошибка другая.
|
|||
13
mistеr
08.12.15
✎
12:24
|
(12) Какие-то параметры неверные. Размер точно 7?
|
|||
14
Урудук
08.12.15
✎
12:51
|
ИмяФайла = "pppp.dbf";
ЛокальныйПуть = "C:\1sbases\"; // Задаем логин и пароль Логин = "login"; Пароль = "password"; //Пишем его в файл, чтобы потом закодировать ИмяФайлаТокен = ПолучитьИмяВременногоФайла(); ФайлТокен = Новый ЗаписьТекста(ИмяФайлаТокен,"windows-1251"); ФайлТокен.Записать(Логин+":"+Пароль); ФайлТокен.Закрыть(); // Кодируем пароль в Base64 ДвоичныйТокен = Новый ДвоичныеДанные(ИмяФайлаТокен); Токен = Base64Строка(ДвоичныйТокен); //и удаляем временный файл УдалитьФайлы(ИмяФайлаТокен); // Получение файла с сервера x = Новый ComОбъект("Microsoft.XMLHTTP"); x.Open("GET","https://webdav.yandex.ru/"+ИмяФайла,0); // третий параметр: 0-синхронный запрос, 1 - асинхронный x.setRequestHeader("Host", "webdav.yandex.ru"); x.setRequestHeader("Accept", "*/*"); x.setRequestHeader("Authorization", "Basic "+Токен); //x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251"); //x.setRequestHeader("Content-Type", "text/plain; charset=windows-1251"); x.Send(); s = Новый ComОбъект("ADODB.Stream"); s.Mode = 3; s.Type = 1; s.Open(); s.Write(x.responseBody); s.SaveToFile(ЛокальныйПуть+ИмяФайла, 2); // Передача файла на сервер x = Новый ComОбъект("Microsoft.XMLHTTP"); x.Open("PUT","https://webdav.yandex.ru/"+ИмяФайла,0); // третий параметр: 0-синхронный запрос, 1 - асинхронный x.setRequestHeader("Host", "webdav.yandex.ru"); x.setRequestHeader("Accept", "*/*"); x.setRequestHeader("Authorization", "Basic "+Токен); s = Новый ComОбъект("ADODB.Stream"); s.Mode = 3; s.Type = 1; s.Open(); s.LoadFromFile(ЛокальныйПуть+ИмяФайла); x.Send(s.Read()); |
|||
15
assest
08.12.15
✎
13:03
|
(13) Размер присваивает сама 1С, так что точный
|
|||
16
assest
08.12.15
✎
13:14
|
(14) Это попытка подключить яндекс диск?
|
|||
17
Урудук
08.12.15
✎
13:14
|
(16)
|
|||
18
Урудук
08.12.15
✎
13:15
|
да
|
|||
19
ЧеловекДуши
08.12.15
✎
13:21
|
(18) У вас приятный метод :)
|
|||
20
assest
08.12.15
✎
14:22
|
(18) Конфигурация будет использоваться на многих компах, и не хотелось бы подключать ЯД
|
|||
21
Serginio1
08.12.15
✎
14:43
|
Можно просто копировать
Путь1 = "https://login:[email protected]/path/to/file.txt"; Путь2 = "c:\file.txt"; КопироватьФайл(Путь1, Путь2); УдалитьФайлы(Путь1); КопироватьФайл(Путь2, Путь1); Удалить файла с Яндекс-диска из 1C |
|||
22
assest
08.12.15
✎
14:58
|
(21) Яндекс больше не поддерживает эту функцию
|
|||
23
vhl
08.12.15
✎
15:08
|
(10) у тебя на яндекс диске папка то "catalog" есть?
|
|||
24
Урудук
08.12.15
✎
15:45
|
(20) Нет, Вы не поняли. Клиент ЯД ставить не надо. Мой код - прямое подключение к ЯД.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |