From 40a4ad9ea1556f6be8ead3996fb2a33540a5e9b7 Mon Sep 17 00:00:00 2001
From: Andrew Davidson
Date: Wed, 27 Oct 2010 20:05:12 -0700
Subject: [PATCH] adding support for file uploading to s3
---
Gemfile | 2 ++
lib/shortenurl.rb | 5 ++--
main.rb | 67 ++++++++++++++++++++++++++++++++++++++++------
views/finished.erb | 12 ++++++++-
views/image.erb | 1 +
views/new.erb | 4 ++-
views/upload.erb | 6 +++++
7 files changed, 85 insertions(+), 12 deletions(-)
create mode 100644 views/image.erb
create mode 100755 views/upload.erb
diff --git a/Gemfile b/Gemfile
index 98b8bf3..e4aeb89 100644
--- a/Gemfile
+++ b/Gemfile
@@ -4,3 +4,5 @@ gem "rack"
gem "sinatra"
gem "sequel"
gem "anybase"
+gem "aws-s3"
+
diff --git a/lib/shortenurl.rb b/lib/shortenurl.rb
index 36b6a1b..f6f434e 100755
--- a/lib/shortenurl.rb
+++ b/lib/shortenurl.rb
@@ -7,6 +7,7 @@ class ShortenUrl < Sequel::Model
primary_key :id
String :key
String :url
+ Boolean :image
Time :time
end
create_table
@@ -23,7 +24,7 @@ class ShortenUrl < Sequel::Model
"#{Shorten.base_url}#{self.key.to_s}"
end
- def self.create_url(link)
+ def self.create_url(link, image = false)
uri = URI::parse(link)
raise "Invalid URL" unless uri.kind_of? URI::HTTP or uri.kind_of? URI::HTTPS
@@ -38,7 +39,7 @@ class ShortenUrl < Sequel::Model
key_check = self.filter(:url => key).first
end
- url = self.new(:url => link, :key => key)
+ url = self.new(:url => link, :key => key, :image => image)
url.save
end
diff --git a/main.rb b/main.rb
index a7de0bc..2ac2b82 100755
--- a/main.rb
+++ b/main.rb
@@ -10,7 +10,7 @@ configure do
require 'ostruct'
Shorten = OpenStruct.new(
- :base_url => "http://➼.ws/",
+ :base_url => ENV['url'],
:service_name => "➼.ws",
:button_text => "➼",
:path_size => 4
@@ -91,14 +91,65 @@ end
post '/' do
validate_link params[:url]
- url = ShortenUrl.create_url(params[:url])
+ url = ShortenUrl.create_url(params[:url], params[:image])
- erb :finished, :locals => { :url => url, :type => "finished" }
+ erb :finished, :locals => { :url => url, :type => "finished", :image => params[:image] }
end
-get '/:short' do
- url = ShortenUrl.find(:key => params[:short])
-
- halt 404, "Page not found" unless url
- redirect url.url
+get '/upload' do
+
+ erb :upload
+
end
+
+post '/upload' do
+ require 'aws/s3'
+
+ # establish connection
+ AWS::S3::Base.establish_connection!(
+ :access_key_id => ENV['s3_key'],
+ :secret_access_key => ENV['s3_secret']
+ )
+
+ # generate key and check uniqueness
+ key = Anybase::Base62.random(Shorten.path_size)
+ key_check = ShortenUrl.filter(:url => key).first
+
+ while key_check
+ key = Anybase::Base62.random(Shorten.path_size)
+ key_check = ShortenUrl.filter(:url => key).first
+ end
+
+ # merge key and extension
+ ext = File.extname(params[:file][:filename])
+ filename = key + ext
+ #filename = params[:file][:filename]
+
+ # upload to S3
+ AWS::S3::S3Object.store(filename, open(params[:file][:tempfile]), 'shorten', :access => :public_read)
+ object_url = AWS::S3::S3Object.url_for(filename, 'shorten', :authenticated => false)
+
+ # generate shorturl
+ url = ShortenUrl.new(:url => object_url, :key => key, :image => params[:image])
+ url.save
+ #url = ShortenUrl.create_url(object_url, params[:image])
+
+ erb :finished, :locals => { :url => url, :type => "finished", :image => params[:image] }
+end
+
+get '/:short' do
+
+ url = ShortenUrl.find(:key => params[:short])
+
+ halt 404, "Page not found" unless url
+
+ if url.image == true
+ erb :image, :locals => {:url => url.url}
+ else
+ redirect url.url
+ end
+
+end
+
+
+
diff --git a/views/finished.erb b/views/finished.erb
index be83cbb..356d265 100755
--- a/views/finished.erb
+++ b/views/finished.erb
@@ -1,3 +1,13 @@
+
+Redirects to <%= url.url %>
+
-Email -- Tweet
\ No newline at end of file
+Email Link -- Tweet Link
+
+
+
+<% if image then %>
+ Check image embedding below:
+ 
+<% end %>
\ No newline at end of file
diff --git a/views/image.erb b/views/image.erb
new file mode 100644
index 0000000..9f3d1b1
--- /dev/null
+++ b/views/image.erb
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/views/new.erb b/views/new.erb
index f4daa9f..95a9e67 100755
--- a/views/new.erb
+++ b/views/new.erb
@@ -1,9 +1,11 @@
+ Shorten URL -- Upload File
<% formtext = "Type URL. Press Enter." %>
diff --git a/views/upload.erb b/views/upload.erb
new file mode 100755
index 0000000..7ba9069
--- /dev/null
+++ b/views/upload.erb
@@ -0,0 +1,6 @@
+ Shorten URL -- Upload File
+