Запрос с передачей файлов (BLOB)
Я пытаюсь сделать запрос и передать файл BLOB (в JIRA). Статус удачный (200), но файл не передается и запрос не возвращает JSON, точнее возвращает, но пустой.
DECLARE
l_start TIMESTAMP;
l_duration NUMERIC;
v_login VARCHAR2(100);
v_password VARCHAR2(100);
l_attachment BLOB;
l_file_name VARCHAR2(255);
l_mime_type VARCHAR2(255);
f_response CLOB;
p_request_body clob;
l_newline VARCHAR2(50) := chr(13) || chr(10);
lco_boundary CONSTANT VARCHAR2(30) := 'AaB03x';
BEGIN
SELECT svalue INTO v_login FROM setup_keys WHERE skey = 'JIRA_LOGIN';
SELECT svalue INTO v_password FROM setup_keys WHERE skey = 'JIRA_PASSWORD';
--SELECT PHOTO INTO f_body_blob FROM LEAN5S_PHOTO WHERE ID = 156;
SELECT PHOTO, FILENAME, MIMETYPE
INTO l_attachment, l_file_name, l_mime_type
FROM LEAN5S_PHOTO
WHERE ID = 156;
apex_web_service.g_request_headers.delete;
apex_web_service.g_request_headers(1).name := 'Content-Type';
apex_web_service.g_request_headers(1).value := 'multipart/form-data; boundary=AaB03x';
apex_web_service.g_request_headers(2).name := 'X-Atlassian-Token';
apex_web_service.g_request_headers(2).value := 'no-check';
--apex_web_service.g_request_headers(3).value := 'Content-Disposition';
--apex_web_service.g_request_headers(3).value := 'form-data; name="file"; filename="coronavirus.png"';
--p_request_body := l_newline || '--' || lco_boundary || l_newline ||
-- 'Content-Disposition: form-data; name="file"; filename="' ||
-- l_file_name || '"' || l_newline || 'Content-Type: ' ||
-- l_mime_type || l_newline ||
-- 'Content-Transfer-Encoding: binary' || l_newline ||
-- l_newline ||
-- apex_web_service.blob2clobbase64(l_attachment) ||
-- l_newline || '--' || lco_boundary || '--';
l_start := systimestamp;
f_response := apex_web_service.make_rest_request(p_url => 'http://site/rest/api/2/issue/key/attachments',
p_http_method => 'POST',
p_username => v_login,
p_password => v_password,
--p_body => p_request_body,
p_body_blob => l_attachment
);
l_duration := round(extract(second from systimestamp - l_start) * 1000);
dbms_output.put_line(apex_web_service.g_status_code || ' ' || f_response);
END;
Думаю проблема в body моего запроса, но не знаю как правильно реализовать.
Сначала попробовал загрузить файлы при помощи Postman - все получилось без проблем. Файлы загружаются, JSON приходит корректный.
POST /rest/api/2/issue/key/attachments HTTP/1.1
Host: site
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
X-Atlassian-Token: no-check
Authorization: Basic YXBleEBzYmEubHQ6YXBleA==
Cookie: JSESSIONID=B4CD82EB597105AD861A1403A98BB151; atlassian.xsrf.token=BU1Q-ZF5J-MN8N-D09A_c28e4c48669e4cde15138661b021218db9cbf200_lin
----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="file"; filename="/C:/.../Desktop/jira-logo-scaled.png"
Content-Type: <Content-Type header here>
(data)
----WebKitFormBoundary7MA4YWxkTrZu0gW