-
Deprecate
:concurrency
option in S3 storage (@janko) -
Don't use a thread pool in
S3#concatenate
(@janko)
-
Allow uploading files larger than 50 GB to S3 storage by scaling the part size according to upload length (@janko)
-
Allow S3 limits to be overriden via the
:limits
option (@janko) -
Reject uploads larger than 5 TB in
S3#create_file
(@janko) -
Remove superfluous
#head_object
operation fromS3#concatenate
(@janko) -
Validate that partial uploads are finished on the concatenation request (@janko)
-
Unparallelize validating partial uploads for concatentation (@janko)
-
Move total length calculation for concatenation into
Tus::Server
(@janko) -
Allow
Upload-Concat
andUpload-Defer-Length
headers in CORS headers (@janko) -
Always override
:content_disposition
option with the value from:upload_options
inS3#create_file
(@janko) -
Apply
name
/type
metadata to:content_type
/:content_disposition
options inS3#create_file
(@janko) -
Use
content_disposition
gem for:content_disposition
option inS3#create_file
(@janko) -
Remove checks whether multipart upload was successfully aborted in S3 storage (@janko)
-
Don't return any
Content-Type
when type is not specified in metadata (@janko) -
Add
ETag
header to download endpoint to preventRack::ETag
buffering file content (@janko) -
Take
:prefix
into account inTus::Storage::S3#expire_files
(@janko)
- Use
content_disposition
gem to generateContent-Disposition
in download endpoint (@janko)
-
Add
before_create
,after_create
,after_finish
, andafter_terminate
hooks (@janko) -
Rename
Tus::Info#concatenation?
toTus::Info#final?
(@janko) -
Use
Storage#concurrency
for parallelized retrieval of partial uploads inUpload-Concat
validation (@janko) -
Replace
:thread_count
with:concurrency
in S3 storage (@janko) -
Validate that sum of partial uploads doesn't exceed
Tus-Max-Size
on concatenation (@janko) -
Drop MRI 2.2 support (@janko)
-
Accept absolute URLs of partial uploads when creating a final upload (@janko)
- Make tus-ruby-server fully work with non-rewindable Rack input (@janko)
- Rename
:download_url
option to:redirect_download
(@janko)
-
Add
:download_url
server option for redirecting to a download URL (@janko) -
Allow application servers to serve files stored on disk via the
Rack::Sendfile
middleware (@janko) -
Reject
Upload-Metadata
which contains key-value pairs separated by spaces (@janko) -
Don't overwite info file if it already exists in
Tus::Storage::FileSystem
(@janko)
- Handle
name
andtype
metadata for Uppy compatibility (@janko)
- Add back support for Roda 2.x (@janko)
-
Upgrade to Roda 3 (@janko)
-
Remove deprecated support for aws-sdk 2.x in
Tus::Storage::S3
(@janko) -
Drop official support for MRI 2.1 (@janko)
-
Add generic
Tus::Response
class that storages can use (@janko) -
Remove
Tus::Response#length
(@janko) -
Remove deprecated Goliath integration (@janko)
-
Return
400 Bad Request
instead of404 Not Found
when some partial uploads are missing in a concatenation request (@janko) -
Use Rack directly instead of Roda's
streaming
plugin for downloding (@janko)
- Improve communication when handling
aws-sdk 2.x
fallback inTus::Storage::S3
(@janko)
- Deprecate
aws-sdk
2.x in favour of the newaws-sdk-s3
gem (@janko)
- Return
Accept-Ranges: bytes
response header in download endpoint (@janko)
- Add support for the new
aws-sdk-s3
gem (@janko)
- Restore backwards compatibility with MRI 2.1 and MRI 2.2 that was broken in previous release (@janko)
-
Ignore retryable networking errors in
Tus::Storage::S3#patch_file
for resiliency (@janko) -
Deprecate
Tus::Server::Goliath
in favour of goliath-rack_proxy (@janko) -
Reduce string allocations in MRI 2.3+ with
frozen-string-literal: true
magic comments (@janko)
-
Add Goliath integration (@janko)
-
[BREAKING] Save data in
"#{uid}"
instead of"#{uid}.file"
inTus::Storage::Filesystem
(@janko) -
Modify S3 storage to cache chunks into memory instead of disk, which reduces disk IO (@janko)
-
[BREAKING] Require each storage to return the number of bytes uploaded in
#patch_file
(@janko) -
Make S3 storage upload all received data from
tus-js-client
that doesn't have max chunk size configured (@janko) -
Verify that all partial uploads have
Upload-Concat: partial
before concatenation (@janko) -
Include CORS and tus response headers in 404 responses (@janko)
-
Improve streaming on dynamic Rack inputs such as
Unicorn::TeeInput
for S3 and Gridfs storage (@janko) -
Terminate HTTP connection to S3 when response is closed (@janko)
-
Allow
Transfer-Encoding: chunked
to be used, meaningContent-Length
can be blank (@janko) -
Remove newlines from the base64-encoded CRC32 signature (@janko)
-
Lazily require
digest
,zlib
, andbase64
standard libraries (@janko)
- Allow empty metadata values in
Upload-Metadata
header (@lysenkooo)
-
Fix download endpoint returning incorrect response body in some cases in development (@janko)
-
Remove
concatenation-unfinished
from list of supported extensions (@janko)
-
Fix invalid
Content-Disposition
header in GET requests to due mutation ofTus::Server.opts[:disposition]
(@janko) -
Make
Response
object fromTus::Server::S3
also respond to#close
(@janko) -
Don't return
Content-Type
header when there is no content returned (@janko) -
Return
Content-Type: text/plain
when returning errors (@janko) -
Return
Content-Type: application/octet-stream
by default in the GET endpoint (@janko) -
Make UNIX permissions configurable via
:permissions
and:directory_permissions
inTus::Storage::Filesystem
(@janko) -
Apply UNIX permissions
0644
for files and0777
for directories inTus::Storage::Filesystem
(@janko) -
Fix
creation-defer-length
feature not working with unlimited upload size (@janko) -
Make the filesize of accepted uploads unlimited by default (@janko)
-
Modify tus server to call
Storage#finalize_file
when the last chunk was uploaded (@janko) -
Don't require length of uploaded chunks to be a multiple of
:chunkSize
inTus::Storage::Gridfs
(@janko) -
Don't infer
:chunkSize
from first uploaded chunk inTus::Storage::Gridfs
(@janko) -
Add
#length
toResponse
objects returned fromStorage#get_file
(@janko)
- Fix
Tus::Storage::S3
not properly supporting the concatenation feature (@janko)
-
Add Amazon S3 storage under
Tus::Storage::S3
(@janko) -
Make the checksum feature actually work by generating the checksum correctly (@janko)
-
Make
Content-Disposition
header on the GET endpoint configurable (@janko) -
Change
Content-Disposition
header on the GET endpoint from "attachment" to "inline" (@janko) -
Delegate concatenation logic to individual storages, allowing the storages to implement it much more efficiently (@janko)
-
Allow storages to save additional information in the info hash (@janko)
-
Don't automatically delete expired files, instead require the developer to call
Storage#expire_files
in a recurring task (@janko) -
Delegate expiration logic to the individual storages, allowing the storages to implement it much more efficiently (@janko)
-
Modify storages to raise
Tus::NotFound
when file wasn't found (@janko) -
Add
Tus::Error
which storages can use (@janko) -
In
Tus::Storage::Gridfs
require that each uploaded chunk except the last one can be distributed into even Mongo chunks (@janko) -
Return
403 Forbidden
in the GET endpoint when attempting to download an unfinished upload (@janko) -
Allow client to send
Upload-Length
on any PATCH request whenUpload-Defer-Length
is used (@janko) -
Support
Range
requests in the GET endpoint (@janko) -
Stream file content in the GET endpoint directly from the storage (@janko)
-
Update
:length
,:uploadDate
and:contentType
Mongo fields on each PATCH request (@janko) -
Insert all sub-chunks in a single Mongo operation in
Tus::Storage::Gridfs
(@janko) -
Infer Mongo chunk size from the size of the first uploaded chunk (@janko)
-
Add
:chunk_size
option toTus::Storage::Gridfs
(@janko) -
Avoid reading the whole request body into memory by doing streaming uploads (@janko)
- Refresh
Upload-Expires
for the file after each PATCH request (@janko)
-
Support Rack 1.x in addition to Rack 2.x (@janko)
-
Don't return 404 when deleting a non-existing file (@janko)
-
Return 204 for OPTIONS requests even when the file is missing (@janko)
-
Make sure that none of the "empty status codes" return content (@janko)