Проблемы с отправкой PDF-файла формы / данных на веб-сервис с использованием Oracle PL / SQL - PullRequest
0 голосов
/ 14 января 2019

У меня проблема с отправкой многочастного PDF-файла формы / данных на веб-сервис из Oracle PLSQL Code. Иногда это работает как брелок, без проблем. Иногда служба отвечает: не PDF-файл.

Дело в том, что когда я загружаю тот же файл с помощью почтальона, он работает, так что он как-то связан с тем, как Oracle преобразует файл в raw.

Вот как я работаю (v_nl - перевод строки):

v_multimsg := v_nl || '--' || v_boundary || v_nl 
                  || 'Content-Disposition: attachment; name="pdfFile"; filename="test.pdf"' || v_nl
                  || 'Content-Type: application/pdf' || v_nl
                  || 'Content-Transfer-Encoding: binary' || v_nl || v_nl;

v_msg_end := v_nl || v_nl || '--' || v_boundary || '--';                                           

dbms_lob.createtemporary(v_request_body, true);    

FOR i IN 1..CEIL(DBMS_LOB.GETLENGTH(p_file) / v_buffer)
     LOOP

        v_varchar := UTL_RAW.CAST_TO_VARCHAR2(DBMS_LOB.SUBSTR(p_file, v_buffer, v_start));
           DBMS_LOB.WRITEAPPEND(v_file, LENGTH(v_varchar), v_varchar);
          v_start := v_start + v_buffer;
     END LOOP;

DBMS_LOB.append(v_request_body, v_multimsg); 
DBMS_LOB.append(v_request_body, v_file);            
DBMS_LOB.append(v_request_body,v_msg_end);    

v_length  := dbms_lob.getlength(v_request_body);   

IF v_length <= v_amount THEN
    dbms_output.put_line('not chunked');
    UTL_HTTP.set_header(v_request, 'Content-Length', v_length);   
    UTL_HTTP.write_text(v_request, v_request_body);    
ELSE
    dbms_output.put_line('chunked');
    UTL_HTTP.set_header(v_request, 'Transfer-Encoding', 'chunked'); 

    WHILE (v_offset < v_length)
    LOOP
        v_buffer := dbms_lob.substr(v_request_body,v_amount,v_offset);

        UTL_HTTP.write_text(v_request, v_buffer);
        v_offset := v_offset + v_amount;
    END LOOP;
END IF;

Это работает как брелок с некоторыми файлами PDF. В чем может быть проблема? Опять же, я думаю, что-то в преобразовании BLOB в RAW, но что?

...