У меня проблема с отправкой многочастного 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, но что?