s3_cors_fileupload 0.2.0.pre1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1 -0
- data/lib/generators/s3_cors_fileupload/install/templates/s3_uploads.js +28 -23
- data/lib/generators/s3_cors_fileupload/install/templates/views/erb/index.html.erb +2 -4
- data/lib/generators/s3_cors_fileupload/install/templates/views/haml/_template_download.html.haml +3 -3
- data/lib/generators/s3_cors_fileupload/install/templates/views/haml/index.html.haml +2 -4
- data/lib/s3_cors_fileupload/rails/form_helper.rb +1 -1
- data/lib/s3_cors_fileupload/rails/policy_helper.rb +26 -22
- data/lib/s3_cors_fileupload/version.rb +1 -1
- data/s3_cors_fileupload.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2cfe9cc0074544ce499718dcade6db5f33a0f51
|
4
|
+
data.tar.gz: da9078e43ca4632005d14abd7722fa5ec91e28cc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c34ea6dcfdcbd365338edae0d6c9360bb99a4b4fb8023c3f2650775af59455cef3fc14e965677e9dff9f041faed8ce3fcf1f636a70b5fb32974610f8b6e1cd9c
|
7
|
+
data.tar.gz: 80b107368d59fb206ea925c414047750d829208b425a318846b4e37a5deac53987517f3672f97d9f86f0f0e637aabe82caf09b43a23ad7f36caccdc02d9c5d66
|
data/CHANGELOG.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
- Upgraded jQuery-File-Upload and the other JavaScript files it is dependent upon to the most recent releases (see [lib/s3\_cors\_fileupload/version.rb](https://github.com/fullbridge-batkins/s3_cors_fileupload/blob/master/lib/s3_cors_fileupload/version.rb) for the current version #'s)
|
4
4
|
- Adjusted the `s3_cors_fileupload_form_tag` view helper so that block arguments passed to it are inserted inside of the form tag as opposed to the end of it.
|
5
5
|
- Changed the default expiration time for the form from 1 hour to 10 hours.
|
6
|
+
- Swapped in [MultiJSON](https://github.com/intridea/multi_json) for the JSON gem.
|
6
7
|
- Added a lot more spec coverage.
|
7
8
|
|
8
9
|
## 0.1.5
|
@@ -39,16 +39,16 @@ $(function() {
|
|
39
39
|
});
|
40
40
|
|
41
41
|
$('#fileupload').bind('fileuploaddone', function (e, data) {
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
42
|
+
// the response will be XML, and can be accessed by calling `data.result`
|
43
|
+
//
|
44
|
+
// Here is an example of what the XML will look like coming back from S3:
|
45
|
+
// <PostResponse>
|
46
|
+
// <Location>https://bucket-name.s3.amazonaws.com/uploads%2F3ducks.jpg</Location>
|
47
|
+
// <Bucket>bucket-name</Bucket>
|
48
|
+
// <Key>uploads/3ducks.jpg</Key>
|
49
|
+
// <ETag>"c7902ef289687931f34f92b65afda320"</ETag>
|
50
|
+
// </PostResponse>
|
51
|
+
|
52
52
|
$.post('/source_files.json',
|
53
53
|
{
|
54
54
|
'source_file[url]': $(data.result).find('Location').text(),
|
@@ -63,10 +63,17 @@ $(function() {
|
|
63
63
|
);
|
64
64
|
});
|
65
65
|
|
66
|
-
|
66
|
+
$('#fileupload').bind('fileuploadcompleted', function (e, data) {
|
67
|
+
// remove the downloaded templates, since in the above function we put our own custom 'template-uploaded' onto the list instead
|
68
|
+
data.context.remove();
|
69
|
+
});
|
70
|
+
|
67
71
|
$('#fileupload').bind('fileuploaddestroyed', function (e, data) {
|
68
|
-
|
69
|
-
|
72
|
+
if (!data.url) // sometimes this callback seems to get triggered a couple times, and has null data after the first time
|
73
|
+
return null;
|
74
|
+
|
75
|
+
var deleted_object_id = String(data.url).split('/').pop();
|
76
|
+
// remove the table row containing the source file information from the page
|
70
77
|
$('#source_file_' + deleted_object_id).remove();
|
71
78
|
});
|
72
79
|
|
@@ -75,14 +82,12 @@ $(function() {
|
|
75
82
|
// used for displaying approximate file size on the file listing index.
|
76
83
|
// functionality mimics what the jQuery-File-Upload script does.
|
77
84
|
function formatFileSize(bytes) {
|
78
|
-
if (typeof bytes !== 'number')
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
}
|
87
|
-
return (bytes / 1000).toFixed(2) + ' KB';
|
85
|
+
if (typeof bytes !== 'number')
|
86
|
+
return '';
|
87
|
+
else if (bytes >= 1000000000)
|
88
|
+
return (bytes / 1000000000).toFixed(2) + ' GB';
|
89
|
+
else if (bytes >= 1000000)
|
90
|
+
return (bytes / 1000000).toFixed(2) + ' MB';
|
91
|
+
else
|
92
|
+
return (bytes / 1000).toFixed(2) + ' KB';
|
88
93
|
}
|
@@ -6,8 +6,8 @@
|
|
6
6
|
|
7
7
|
<div class="javascript-templates">
|
8
8
|
<%= render 'template_upload' %>
|
9
|
+
<%= render 'template_download' %>
|
9
10
|
<%= render 'template_uploaded' %>
|
10
|
-
<%# render 'template_download' %>
|
11
11
|
</div>
|
12
12
|
</div>
|
13
13
|
|
@@ -17,9 +17,7 @@
|
|
17
17
|
// Initialize the jQuery File Upload widget:
|
18
18
|
$('#fileupload').fileupload({
|
19
19
|
dataType: 'xml',
|
20
|
-
sequentialUploads: true
|
21
|
-
downloadTemplateId: null,
|
22
|
-
downloadTemplate: null
|
20
|
+
sequentialUploads: true
|
23
21
|
});
|
24
22
|
|
25
23
|
// Load existing files:
|
data/lib/generators/s3_cors_fileupload/install/templates/views/haml/_template_download.html.haml
CHANGED
@@ -10,8 +10,8 @@
|
|
10
10
|
%td.size
|
11
11
|
%span {%=o.formatFileSize(file.size)%}
|
12
12
|
%td.error{:colspan => "2"}
|
13
|
-
%span.label.label-important
|
14
|
-
{%=
|
13
|
+
%span.label.label-important Error
|
14
|
+
{%=file.error%}
|
15
15
|
{% } else { %}
|
16
16
|
%td.preview
|
17
17
|
{% if (file.thumbnail_url) { %}
|
@@ -19,7 +19,7 @@
|
|
19
19
|
%img{:src => "{%=file.thumbnail_url%}"}/
|
20
20
|
{% } %}
|
21
21
|
%td.name
|
22
|
-
%a{:download => "{%=file.name%}", :href => "{%=file.url%}", :rel => "{%=file.thumbnail_url&&'gallery'%}", :title => "{%=file.name%}"} {%=file.name%}
|
22
|
+
%a{:download => "{%=file.name%}", :href => "{%=file.url%}", :rel => "{%=file.thumbnail_url&&'gallery'%}".html_safe, :title => "{%=file.name%}"} {%=file.name%}
|
23
23
|
%td.size
|
24
24
|
%span {%=$('#fileupload').formatFileSize(file.size)%}
|
25
25
|
%td{:colspan => "2"}
|
@@ -6,17 +6,15 @@
|
|
6
6
|
|
7
7
|
.javascript-templates
|
8
8
|
= render 'template_upload'
|
9
|
+
= render 'template_download'
|
9
10
|
= render 'template_uploaded'
|
10
|
-
=# render 'template_download'
|
11
11
|
|
12
12
|
:javascript
|
13
13
|
$(function () {
|
14
14
|
// Initialize the jQuery File Upload widget:
|
15
15
|
$('#fileupload').fileupload({
|
16
16
|
dataType: 'xml',
|
17
|
-
sequentialUploads: true
|
18
|
-
downloadTemplateId: null,
|
19
|
-
downloadTemplate: null
|
17
|
+
sequentialUploads: true
|
20
18
|
});
|
21
19
|
|
22
20
|
// Load existing files:
|
@@ -21,7 +21,7 @@ module S3CorsFileupload
|
|
21
21
|
hidden_form_fields = {
|
22
22
|
:key => '',
|
23
23
|
'Content-Type' => '',
|
24
|
-
|
24
|
+
:AWSAccessKeyId => options[:access_key_id] || Config.access_key_id,
|
25
25
|
:acl => policy_helper.options[:acl],
|
26
26
|
:policy => policy_helper.policy_document,
|
27
27
|
:signature => policy_helper.upload_signature,
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'base64'
|
2
2
|
require 'openssl'
|
3
3
|
require 'digest/sha1'
|
4
|
-
require '
|
4
|
+
require 'multi_json'
|
5
5
|
|
6
6
|
module S3CorsFileupload
|
7
7
|
class PolicyHelper
|
@@ -18,31 +18,35 @@ module S3CorsFileupload
|
|
18
18
|
|
19
19
|
# generate the policy document that amazon is expecting.
|
20
20
|
def policy_document
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
21
|
+
@policy_document ||=
|
22
|
+
Base64.encode64(
|
23
|
+
MultiJson.dump(
|
24
|
+
{
|
25
|
+
expiration: 10.hours.from_now.utc.iso8601(3),
|
26
|
+
conditions: [
|
27
|
+
{ bucket: options[:bucket] },
|
28
|
+
{ acl: options[:acl] },
|
29
|
+
{ success_action_status: '201' },
|
30
|
+
["content-length-range", 0, options[:max_file_size]],
|
31
|
+
["starts-with", "$utf8", ""],
|
32
|
+
["starts-with", "$key", ""],
|
33
|
+
["starts-with", "$Content-Type", ""]
|
34
|
+
]
|
35
|
+
}
|
36
|
+
)
|
37
|
+
).gsub(/\n/, '')
|
35
38
|
end
|
36
39
|
|
37
40
|
# sign our request by Base64 encoding the policy document.
|
38
41
|
def upload_signature
|
39
|
-
|
40
|
-
|
41
|
-
OpenSSL::
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
@upload_signature ||=
|
43
|
+
Base64.encode64(
|
44
|
+
OpenSSL::HMAC.digest(
|
45
|
+
OpenSSL::Digest::SHA1.new,
|
46
|
+
options[:secret_access_key],
|
47
|
+
self.policy_document
|
48
|
+
)
|
49
|
+
).gsub(/\n/, '')
|
46
50
|
end
|
47
51
|
end
|
48
52
|
end
|
data/s3_cors_fileupload.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
|
|
24
24
|
s.rdoc_options = %w(--charset=UTF-8)
|
25
25
|
|
26
26
|
s.add_dependency('rails', ['~> 3.1'])
|
27
|
+
s.add_dependency('multi_json', ['~> 1.0'])
|
27
28
|
s.add_dependency('jquery-rails', ['>= 2.0'])
|
28
29
|
s.add_dependency('aws-s3', ['~> 0.6']) # :require => 'aws/s3'
|
29
30
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: s3_cors_fileupload
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.0
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ben Atkins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-05-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: multi_json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: jquery-rails
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|