[Linux] Свой скриншотер с загрузкой на сервер

March 12, 2016

Статья Сергей Картамышев

Для скриншотов будем использовать библиотеку imagemagic.

Установка

Устанавливаем библиотеку.

sudo apt-get install imagemagick

Создаём скрипт, который будет отправлять файл на сервер (например: makescreenshot).

#!/bin/bash
##
# Скриншотер с загрузкой на сервер
# @author sergKs
##
date=`date +%F-%H:%M`
tmpDir='/tmp'
file="Screenshot_$date.png"
uploadUrl='ссылка'
key='ключ'
import -monitor $tmpDir/$file
response=$(curl -F "file=@$tmpDir/$file;filename=$file;type=image/png" -F "key=$key" -A 'Mozilla/4.0' $uploadUrl)
unlink $tmpDir/$file
zenity
    --entry \
    --width=450 \
    --title="Скриншот залит на сервер" \
    --text="Ссылка" \
    --entry-text $response
  • tmpDir - папка для временного хранения файла на диске
  • uploadUrl - ссылка на сервер загрузки файла
  • key - ключ безопасности
  • zenity - служит для отображения графического окна со ссылкой на файл, которых уже залит на сервер.

Теперь остаётся навесить этот скрипт на горячую клавишу. Для этого заходим в Параметры системы -> Клавиатура -> Комбинация клавиш -> Дополнительные комбинации. Добавляем название и команду. Команда - абсолютный путь до вашего скрипта (например: /home/user/makescreenshot).

Сервер

Так как я пишу на PHP, то и сервер написан на PHP.

Вот пример принятия файла.


$params = [
    'key' => 'ключ ...'
];
if (isset($_POST['key'])) {
    if ($_POST['key'] === $params['key']) {
        if (strlen($_FILES['file']['name']) > 0) {
            $data = generateFilename($_FILES['file']['name']);
            $link = mb_substr(md5(date('Y-m-d H:i:s')) . md5($data['name']), 16, 32);
            file_put_contents('uploads/files/' . $data['name'], file_get_contents($_FILES['file']['tmp_name']));
            echo 'http://' . $_SERVER['HTTP_HOST'] . '/f/' . $link;
        } else {
            echo 'ERROR_Require_param_file';
        }
    } else {
        echo 'ERROR_Invalid_key';
    }
} else {
    echo 'ERROR_Require_param_key';
}

Комментарии

comments powered by Disqus