-
Deprecate
:concurrencyoption 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
:limitsoption (@janko) -
Reject uploads larger than 5 TB in
S3#create_file(@janko) -
Remove superfluous
#head_objectoperation 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-ConcatandUpload-Defer-Lengthheaders in CORS headers (@janko) -
Always override
:content_dispositionoption with the value from:upload_optionsinS3#create_file(@janko) -
Apply
name/typemetadata to:content_type/:content_dispositionoptions inS3#create_file(@janko) -
Use
content_dispositiongem for:content_dispositionoption inS3#create_file(@janko) -
Remove checks whether multipart upload was successfully aborted in S3 storage (@janko)
-
Don't return any
Content-Typewhen type is not specified in metadata (@janko) -
Add
ETagheader to download endpoint to preventRack::ETagbuffering file content (@janko) -
Take
:prefixinto account inTus::Storage::S3#expire_files(@janko)
- Use
content_dispositiongem to generateContent-Dispositionin download endpoint (@janko)
-
Add
before_create,after_create,after_finish, andafter_terminatehooks (@janko) -
Rename
Tus::Info#concatenation?toTus::Info#final?(@janko) -
Use
Storage#concurrencyfor parallelized retrieval of partial uploads inUpload-Concatvalidation (@janko) -
Replace
:thread_countwith:concurrencyin S3 storage (@janko) -
Validate that sum of partial uploads doesn't exceed
Tus-Max-Sizeon 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_urloption to:redirect_download(@janko)
-
Add
:download_urlserver option for redirecting to a download URL (@janko) -
Allow application servers to serve files stored on disk via the
Rack::Sendfilemiddleware (@janko) -
Reject
Upload-Metadatawhich contains key-value pairs separated by spaces (@janko) -
Don't overwite info file if it already exists in
Tus::Storage::FileSystem(@janko)
- Handle
nameandtypemetadata 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::Responseclass that storages can use (@janko) -
Remove
Tus::Response#length(@janko) -
Remove deprecated Goliath integration (@janko)
-
Return
400 Bad Requestinstead of404 Not Foundwhen some partial uploads are missing in a concatenation request (@janko) -
Use Rack directly instead of Roda's
streamingplugin for downloding (@janko)
- Improve communication when handling
aws-sdk 2.xfallback inTus::Storage::S3(@janko)
- Deprecate
aws-sdk2.x in favour of the newaws-sdk-s3gem (@janko)
- Return
Accept-Ranges: bytesresponse header in download endpoint (@janko)
- Add support for the new
aws-sdk-s3gem (@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_filefor resiliency (@janko) -
Deprecate
Tus::Server::Goliathin favour of goliath-rack_proxy (@janko) -
Reduce string allocations in MRI 2.3+ with
frozen-string-literal: truemagic 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-clientthat doesn't have max chunk size configured (@janko) -
Verify that all partial uploads have
Upload-Concat: partialbefore concatenation (@janko) -
Include CORS and tus response headers in 404 responses (@janko)
-
Improve streaming on dynamic Rack inputs such as
Unicorn::TeeInputfor S3 and Gridfs storage (@janko) -
Terminate HTTP connection to S3 when response is closed (@janko)
-
Allow
Transfer-Encoding: chunkedto be used, meaningContent-Lengthcan be blank (@janko) -
Remove newlines from the base64-encoded CRC32 signature (@janko)
-
Lazily require
digest,zlib, andbase64standard libraries (@janko)
- Allow empty metadata values in
Upload-Metadataheader (@lysenkooo)
-
Fix download endpoint returning incorrect response body in some cases in development (@janko)
-
Remove
concatenation-unfinishedfrom list of supported extensions (@janko)
-
Fix invalid
Content-Dispositionheader in GET requests to due mutation ofTus::Server.opts[:disposition](@janko) -
Make
Responseobject fromTus::Server::S3also respond to#close(@janko) -
Don't return
Content-Typeheader when there is no content returned (@janko) -
Return
Content-Type: text/plainwhen returning errors (@janko) -
Return
Content-Type: application/octet-streamby default in the GET endpoint (@janko) -
Make UNIX permissions configurable via
:permissionsand:directory_permissionsinTus::Storage::Filesystem(@janko) -
Apply UNIX permissions
0644for files and0777for directories inTus::Storage::Filesystem(@janko) -
Fix
creation-defer-lengthfeature not working with unlimited upload size (@janko) -
Make the filesize of accepted uploads unlimited by default (@janko)
-
Modify tus server to call
Storage#finalize_filewhen the last chunk was uploaded (@janko) -
Don't require length of uploaded chunks to be a multiple of
:chunkSizeinTus::Storage::Gridfs(@janko) -
Don't infer
:chunkSizefrom first uploaded chunk inTus::Storage::Gridfs(@janko) -
Add
#lengthtoResponseobjects returned fromStorage#get_file(@janko)
- Fix
Tus::Storage::S3not 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-Dispositionheader on the GET endpoint configurable (@janko) -
Change
Content-Dispositionheader 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_filesin 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::NotFoundwhen file wasn't found (@janko) -
Add
Tus::Errorwhich storages can use (@janko) -
In
Tus::Storage::Gridfsrequire that each uploaded chunk except the last one can be distributed into even Mongo chunks (@janko) -
Return
403 Forbiddenin the GET endpoint when attempting to download an unfinished upload (@janko) -
Allow client to send
Upload-Lengthon any PATCH request whenUpload-Defer-Lengthis used (@janko) -
Support
Rangerequests in the GET endpoint (@janko) -
Stream file content in the GET endpoint directly from the storage (@janko)
-
Update
:length,:uploadDateand:contentTypeMongo 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_sizeoption toTus::Storage::Gridfs(@janko) -
Avoid reading the whole request body into memory by doing streaming uploads (@janko)
- Refresh
Upload-Expiresfor 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)