Версия для печати темы (https://pro1c.org.ua/index.php?s=b51e66ce60d7223838e9343d66546b8d&showtopic=66538)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Администрирование и настройка 1С _ API Малый бизнес фотохостинг

Автор: cotllette 27.05.21, 11:09

Помогите, плизочки, чайнику разобраться с АПИ . Нашла фотохостинг с АПИ https://pro1c.org.ua/redirect.php?https://insane.su/forum/topic/23092-ipic-api/ https://pro1c.org.ua/redirect.php?https://insane.su/forum/topic/23092-ipic-api/
Пытаюсь выгрузить фото и получить в ответ ссылку на него. Танцую с бубном уже 2 дня..

    АдресФайла = КартинкаТовара.ПолныйПуть;
    СтрокаДляОтправки = "<form target=""ipic.su/api/index.php"" action=""loadimg"" method=""post"" enctype=""multipart/form-data"">
    |<a href=""http://ipic.su"">ipic.su/api/index.php</a>
    |<input name=""action"" value=""loadimg"" type=""hidden""/>
    |<input name=""quality"" value=""85"" type=""hidden""/>
    |<input type=""file"" name=""image"" image=" + АдресФайла + "/>
        |</form>";
        
        
    //////Запись = Новый Структура;
    //////Запись.Вставить("quality", "85");
    //////Запись.Вставить("image", КартинкаТовара.ПолныйПуть);
    //////
    //////
    //////ЗаписьJSON = Новый ЗаписьJSON;
    //////ЗаписьJSON.УстановитьСтроку();  
    //////    
    //////ЗаписатьJSON(ЗаписьJSON, Запись);
    //////ДанныеДляТела = ЗаписьJSON.Закрыть();
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();  
        
    ЗаписатьJSON(ЗаписьJSON, СтрокаДляОтправки);
    ДанныеДляТела = ЗаписьJSON.Закрыть();

    //
        ЗаголовокЗапросАвт = Новый Соответствие();
    ЗаголовокЗапросАвт.Вставить("Content-Type", "text/javascript");
    ЗаголовокЗапросАвт.Вставить("src", "http://ipic.su/javascript/functions.js");
    ЗаголовокЗапросАвт.Вставить("language", "javascript");
    
    //ЗаголовокЗапросАвт.Вставить("enctype", "multipart/form-data");
    //ЗаголовокЗапросАвт.Вставить("target", "http://ipic.su/index.php");
    //ЗаголовокЗапросАвт.Вставить("action", "loadimg");
    //ЗаголовокЗапросАвт.Вставить("method", "post");


    ЗапросАвт = Новый HTTPЗапрос("/api/index.php",ЗаголовокЗапросАвт);
    ЗапросАвт.УстановитьТелоИзСтроки(ДанныеДляТела);

    ОтветHTTP = HTTPСоединение.ВызватьHTTPМетод("POST", ЗапросАвт);


В ответе по идее должно появиться имя файла и код 200, или ошибка.
у меня в ответе код 200 есть, но вместо имя файла : заголовки - соответствие

и в 1м и в закомментированном случае


Я рукожоп или апи не работает?


Автор: logist 27.05.21, 11:51

Похоже на рукожоп, забудьте это всё, и напишите с нуля. Сейчас ваш код отправляет на сервер просто текст указанный в СтрокаДляОтправки

upd: вообще посмотрите на более простой и понятный сервис https://pro1c.org.ua/redirect.php?https://api.imgbb.com/

Автор: logist 29.05.21, 0:34

Как-то так, код не тестировался и писался на коленке, думаю достаточный для понимания

function UploadImgToServer(LocalPath, Expiration = 0)
    // Imgbb's API (https://api.imgbb.com/)
    // LocalPath - Path to img on yr PC
    // Expiration - Enable this if you want to force uploads to be auto deleted after certain time (in seconds 60-15552000)    
    Try
        Coonection = New HTTPConnection("api.imgbb.com",443,,,,True);
    Except
        Return "";
    EndTry;    
    Key            = ""; // Imgbb's API key
    ImgFile        = New File(LocalPath);
    TmpFile        = GetTempFileName();
    FileContent    = Base64String(New BinaryData(LocalPath));    
    ImgStram = New TextWriter(TmpFile, TextEncoding.UTF8, Chars.LF, False);
    ImgStram.WriteLine("Content-Disposition: form-data; name=""image""");
    ImgStram.WriteLine(FileContent);    
    Headers = New Map;
    Headers.Insert("Content-Type", "multipart/form-data;");    
    Request = New HTTPRequest;
    Request.Headers = Headers;
    Request.ResourceAddress = "/upload?key="+Key;
    If Expiration > 0 Then
        Request.ResourceAddress = Request.ResourceAddress + "&expiration="+Format(Expiration,"NG=0");
    Endif;
    Request.SetBodyFileName(TmpFile);    
    Response = Coonection.Post(Request);
    If Not Response = Undefined Then
        JsonResponse = Response.GetBodyAsString();
        Try
            JSON = New JSONReader;
            JSON.SetString(JsonResponse);
            Result = ReadJSON(JSON, True);
            Return Result["data"]["url"];
            // If need delete url:
            //Return Result["delete_url"];
        Except
        EndTry;
    EndIf;
    // Any unsuccessful response
    Return "";    
EndFunction

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua