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やデータビズが好きです。このサイトは宮内の個人的なメモです。