Программисты работающие с хранилищем файлов GigaChat отзовитесь!
Есть серьёзный вопрос.
А вопрос-то какой?
Может не только работавшие могут с ним помочь )
Нужно отправить изображение в хранилище файлов GigaChat для дальнейшей работы с ним нейросети.
Пишу такой код:
URL url = new URL("https://gigachat.devices.sberbank.ru/api/v1/files");
//HttpURLConnection
connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setUseCaches(false);
connection.setRequestProperty("Connection", "Keep-Alive");
connection.setRequestProperty("Cache-Control", "no-cache");
connection.setRequestProperty("ENCTYPE", "multipart/form-data");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + "****");
connection.setRequestMethod("POST");
connection.setConnectTimeout(100000);
connection.setReadTimeout(100000);
connection.setRequestProperty("Accept", "application/json"); // Если вы ожидаете JSON в ответ
connection.setRequestProperty("Authorization", "Bearer "+Token);
Bitmap b = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
connection.setFixedLengthStreamingMode(267);
connection.connect();
DataOutputStream request = new DataOutputStream(connection.getOutputStream());
request.writeBytes("--****\r\n");
request.writeBytes("Content-Disposition: form-data; object=\"file\"; filename=\"f000\"\r\n");
request.writeBytes("Content-Type: image/png\r\n");
request.writeBytes("\r\n");
// ByteArrayOutputStream bao1 = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 1, request);
// byte[] ba1 = bao1.toByteArray();
// request.write(ba1);
request.writeBytes("\r\n");
//request.flush();
request.writeBytes("--****\r\n");
request.writeBytes("Content-Disposition: form-data; purpose=\"general\"\r\n");
request.writeBytes("--****--\r\n");
request.flush(); request.close();
text=""+connection.getResponseCode()+ HttpURLConnection.HTTP_INTERNAL_ERROR+
connection.getResponseMessage();
Значение text равно: 500500Internal Server Error.
connection.getErrorStream() содержит текст:
<html>
<head><title>500 Internal Server Error</title></head>
<body>
<center><h1>500 Internal Server Error</h1></center>
<hr><center>SOWA</center>
</body>
</html>
В чём проблема?
А другие запросы работают? Может из-за размера картинки 1х1?
Или размер не тот
Я бы взял какую-нибудь более высокоуровневую библиотеку для НТТР.
OkHttp, …
Увеличил размер картинки до 1000х1000 и соответственно connection.setFixedLengthStreamingMode изменил. Не помогло.
Я пишу на андроиде, в программной среде, где OkHttp не поддерживается, поэтому пишу по старинке (если можно так выразиться).
Может ещё есть идеи? В интернете пока не нашёл.
Пользовался методом GET для проверки количества изображений в хранилище - с этим проблем нет.