Разместите файл blob внутри объекта json как двоичный поток с oracle - PullRequest
1 голос
/ 17 июня 2020

Я написал функцию отправки на электронную почту, используя pl / sql. Мне нужно отправить другие данные с файлом blob в формате json. код процедуры, как показано ниже.

create or replace FUNCTION EmailProc (
    p_to           IN VARCHAR2,
    p_subject      IN VARCHAR2,
    p_body         IN VARCHAR2,  
    p_attachement  IN BLOB  DEFAULT NULL
) RETURN NUMBER AS

    req           utl_http.req;
    res           utl_http.resp;
    url           VARCHAR2(4000) := 'http://192.168.168.01:8080/api/Myemails';
    name          VARCHAR2(4000);
    buffer        VARCHAR2(32767);
    content       CLOB:= '{
                                  "to": "'|| p_to ||'",
                                  "subject": "'|| p_subject ||'",
                                  "body": "'|| p_body ||'",                                  
                                  "Attahement": '|| p_attachement ||'                       
                                }';
    emailresult   NUMBER := 0; 
BEGIN
    BEGIN       

        dbms_output.put_line(content);
        req := utl_http.begin_request(url,'POST',' HTTP/1.1');
        utl_http.set_header(req,'user-agent','mozilla/4.0');
        utl_http.set_header(req,'content-type','application/json; charset=UTF-8');
        utl_http.set_header(
            req,
            'Content-Length',
             DBMS_LOB.getlength (content)
        );

        utl_http.set_body_charset(req, 'UTF-8');
        utl_http.WRITE_RAW(r    => req, data => UTL_RAW.CAST_TO_RAW(content));
        res := utl_http.get_response(req);
        utl_http.read_line(res,buffer,true);
        dbms_output.put_line(buffer);

        IF
            buffer = '"000"'
        THEN
            dbms_output.put_line(buffer);
            emailresult := 1;
        END IF;

        utl_http.end_response(res);
        RETURN emailresult;
    EXCEPTION
        WHEN OTHERS THEN
            utl_http.end_response(res);
            dbms_output.put_line('exception block in email function');
            RETURN 0;
    END;
END EmailProc;

Выше кода я использовал "Attahement": '|| p_attachement || ', но это не может быть реализовано таким образом. Мне нужен совет, как реализовать файл blob как двоичный поток внутри формата json.

Моя модель включает свойство вложения

 public byte[] Attahement { get; set; }

Мой веб-API, как показано ниже

public void Myemails(EmailModel emailModel)

Мне удалось привязать все данные, кроме вложения. Кто-нибудь может дать мне совет, как мне проанализировать вложение внутри объекта json как двоичный поток?

...