Как надежно загружать файлы в Slack с помощью php после файлов.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как надежно загружать файлы в Slack с помощью php после файлов.

Сообщение Anonymous »

Я пытаюсь надежно загрузить файл PDF в Slack, используя files.getUploadUrlexternal и files.completeUploadexternal, который заменяет файлы. Использование Application/xwww-form-urlencoded , передача имени файла, длины и alt_text (alt_txt с PHP LIB Jolode).
[*] Поместите необработанные байты файла в возвращаемый upload_url с использованием приложения/octet-stream и включить правильное содержание . files.completeUploadexternal , передавая возвращенный файл_ид и канал_ид.
Получить постоянную ссылку через файлы. />
Идентификатор файла создается правильно на шаге 1. < /li>
Сообщение появляется в канале Slack с ожидаемой постоянной ссылкой. Проблема: < /strong>
загруженный файл поврежден или нечитаем, и при попытке загрузить его с постоянной ссылки, Slack возвращает: < /p>

«Ошибка, обслуживающая ошибку» < /p>
< /blockquote>
В некоторых прогонках я также получаю этот временной ошибку: < /p> < /p> < /p> . />
Ошибка скручивания 28: Операция по временам после 60001 миллисекунд с 0
Bytes полученными < /p>
< /blockquote>
и добавление повторной задачи. /> Неверный тип ресурса: ресурс (закрыт)

Я знаю об этой связанной проблеме, которая предполагает прерывистые неудачи на стороне Слэка, но в моем случае это происходит очень последовательно, и в любом случае, что у другого поста еще нет ответа. />
Использование fopen ($ filePath, 'r') и fopen ($ filePath, 'rb') в качестве потока вместо файла_г_г. /> Явно добавление заголовка длины содержимого. /> < /ul>
❓ Вопрос (ы): < /strong> < /p>
Каков правильный и надежный способ поместить файл в Slack upload_url из PHP в 2025? Правильно?public static function sendFile(string $token, string $channel, string $filePath, string $filename, ?string $message = null)
{
$client = ClientFactory::create($token);

// Step 1: Get URL
$getUpload = $client->filesGetUploadURLExternal([
'filename' => $filename,
'length' => filesize($filePath),
'alt_txt' => $message ?? 'PDF file',
]);

$uploadUrl = $getUpload->getUploadUrl();
$fileId = $getUpload->getFileId();

// Step 2: Upload the file
$stream = fopen($filePath, 'r');

$putRes = Http::withOptions(['verify' => false])
//->retry(3, 5000) // 3 tries, 5 seconds each
->withHeaders([
'Content-Type' => 'application/octet-stream',
'Content-Length' => filesize($filePath),
])
->withBody($stream, 'application/octet-stream')
->timeout(60)
->put($uploadUrl);

// Step 3: Complete the upload
$client->filesCompleteUploadExternal([
'files' => [
[
'id' => $fileId,
'title' => $filename,
]
],
'channel_id' => $channel,
]);

// Step 4: Send the message with the file link
$fileInfo = $client->filesInfo(['file' => $fileId]);
$permalink = $fileInfo->getFile()->getPermalink();

$client->chatPostMessage([
'channel' => $channel,
'text' => "{$message}\n{$permalink}",
]);
}
< /code>
Любое понимание ценится. < /p>
Обновление: что -то с PHP. Этот сценарий Python работает: < /p>
# upload_slack_hardcoded.py

from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError

# === ⚙️ CONFIG ===
token = "xoxb-..."
channel_id = "C..."
file_path = "demo.pdf"
message = "🧪 PDF uploaded from Python script test"

# === 🚀 RUN===
client = WebClient(token=token)

try:
with open(file_path, "rb") as file_content:
response = client.files_upload_v2(
channel=channel_id,
file=file_content,
filename="demo.pdf",
initial_comment=message
)
print("✅ SUCCESS:", response["file"]["id"])
except SlackApiError as e:
print("❌ Slack API Error:", e.response["error"])
except FileNotFoundError:
print("❌ File not found:", file_path)
except Exception as e:
print("❌ Error:", str(e))


Подробнее здесь: https://stackoverflow.com/questions/796 ... recation-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»