質問編集履歴

3

追記

2018/10/23 05:04

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
 
50
50
 
51
- ただZIPファイルをファイル単位で途中を取り出すことができれば実現はできそうなのです
51
+ なのでZIPファイルを作るときにファイル単位で途中を取り出すことができれば実現はできそうなのです
52
52
 
53
53
 
54
54
 

2

追記

2018/10/23 05:04

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -25,3 +25,103 @@
25
25
 
26
26
 
27
27
  よろしくおねがいします
28
+
29
+
30
+
31
+
32
+
33
+ 追記:
34
+
35
+
36
+
37
+ Rails 自体にはストリームで出力を返す方法がいくつかあるみたいです
38
+
39
+
40
+
41
+ include ActionController::Live
42
+
43
+ をつかうとか
44
+
45
+ render stream
46
+
47
+ をつかうとか
48
+
49
+
50
+
51
+ ただZIPファイルをファイル単位で途中を取り出すことができれば実現はできそうなのです
52
+
53
+
54
+
55
+ ためしたこと:
56
+
57
+
58
+
59
+ ZIPを扱うのはrubyzipを使った記事が多いのですが
60
+
61
+ だいたい以下のようなサンプルになってます(あるいは CreatFileをつかったもの)
62
+
63
+
64
+
65
+ ```
66
+
67
+ buffer = Zip::OutputStream.write_buffer(::StringIO.new('')) do |out|
68
+
69
+ out.put_next_entry("file1")
70
+
71
+ out.write "data1"
72
+
73
+ # ここで file1 の分だけのデータを取り出したい
74
+
75
+ out.put_next_entry("file2")
76
+
77
+ out.write "data2"
78
+
79
+ end
80
+
81
+ puts buffer.string # ここで全部出力
82
+
83
+ ```
84
+
85
+
86
+
87
+ Zip::OutputStreamのドキュメントによると
88
+
89
+ write_buffer(io = ::StringIO.new(''), encrypter = nil) {|zos| ... } ⇒ Object
90
+
91
+
92
+
93
+ write_buffer の引数に出力先の StringIO があるので
94
+
95
+ これからどうにか途中のデータを取り出すことができれば実現できそうな気がするのですが
96
+
97
+ ```
98
+
99
+ require 'zip'
100
+
101
+ require "stringio"
102
+
103
+
104
+
105
+ io = StringIO.new('')
106
+
107
+
108
+
109
+ buffer = Zip::OutputStream.write_buffer(io) do |out|
110
+
111
+ out.put_next_entry("file1")
112
+
113
+ out.write "data1"
114
+
115
+ puts io.read
116
+
117
+ io.rewind
118
+
119
+ out.put_next_entry("file2")
120
+
121
+ out.write "data2"
122
+
123
+ end
124
+
125
+ ```
126
+
127
+ 等としても何も出力されません

1

誤字

2018/10/23 05:03

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- のように zipline というジェムを使った記事がいくつかでてくるのですが
9
+ のようにziplineというジェムを使った記事がいくつかでてくるのですが
10
10
 
11
11
  https://teratail.com/questions/152629
12
12