gyazoが良い感じ。

投稿日: 2009年11月16日 更新日: 2017年07月22日

超簡単画像アップロードサービスのgyazo。

前から名前は知ってたけど、クライアントどころかサーバまでオープンソースになっているのは先週知った。

しかもこれが超シンプル。

サーバスクリプトに至ってはコメント除けば20行ないくらい。ライセンスはGPLです。一部修正。

#!/usr/bin/env ruby
# -*- ruby -*-
#
# $Date$
# $Rev$
#
require 'cgi'
require 'digest/md5'
require 'sdbm'

cgi = CGI.new("html3")

id = cgi.params['id'][0].read
imagedata = cgi.params['imagedata'][0].read
#hash = Digest::MD5.new(imagedata).to_s
hash = Digest::MD5.hexdigest(imagedata).to_s

dbm = SDBM.open('db/id',0644)
dbm[hash] = id
dbm.close

File.open("data/#{hash}.png","w").print(imagedata)

#cgi.out { "http://gyazo.com/#{hash}.png" }
cgi.out { "http://gyazo.example.com/data/#{hash}.png" }

修正箇所は下記2箇所(コメントが修正前)。

#hash = Digest::MD5.new(imagedata).to_s
hash = Digest::MD5.hexdigest(imagedata).to_s


#cgi.out { "http://gyazo.com/#{hash}.png" }
cgi.out { "http://gyazo.example.com/data/#{hash}.png" }

Digest::MD5の仕様変更とURL変更。

上記に適当なファイル名をつけてアップする。後は必要なフォルダ(dbとdata)を作成して書込権限を付けておく。

で、.htaccessも置いておく。

Options +ExecCGI

AddHandler cgi-script .cgi

設置イメージはこんな感じ。

db/
data/
.htaccess
upload.cgi

クライアントコードについてはgyazowinのコードを自分のサーバにあわせて一部変更すればOK。URLがハードコーディングされているので、そこを変更するだけ。一部抜粋。

BOOL uploadFile(HWND hwnd, LPCTSTR fileName)
{
    const TCHAR* UPLOAD_SERVER = _T("gyazo.example.com");
    const TCHAR* UPLOAD_PATH   = _T("/upload.cgi");
...(snip)...
        woopar = "http://gyazo.example.com/data/" + result.substr(17);

以上で、自分だけのgyazoサーバとクライアントの出来上がり。

名前:宮内 はじめ

Code for Nagoya名誉代表

E2D3名古屋支部長

プログラマーです。GISやデータビズが好きです。このサイトは宮内の個人的なメモです。

プロフィール

お問い合わせ