RocketChat / Rocket.Chat

The communications platform that puts data protection first.
https://rocket.chat/
Other
40.06k stars 10.34k forks source link

Error loading files with accent in name when storage type is Amazon S3 #8752

Closed glesio closed 6 years ago

glesio commented 6 years ago

Description:

The current value of "ContentDisposition" metadata does not comply with the specifications of Amazon S3

"The following character sets are generally safe for use in key names: Alphanumeric characters [0-9a-zA-Z] Special characters !, -, _, ., *, ', (, and )" http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html

Server Setup Information:

Server: Version: 0.59.3 Node version: v4.8.4 Database Migration: 104 Deployment: Docker File Upload: Amazon S3

Steps to Reproduce:

Filename Example: arquivo-com-acentuação.pdf

Relevant logs:

[34mI20171101-15:59:31.987(0) Exception while invoking method 'ufsComplete' AccessDenied: Access Denied   at Object.Future.wait (/app/bundle/programs/server/node_modules/fibers/future.js:449:15)   at [object Object].Meteor.methods.ufsComplete (/app/bundle/programs/server/packages/jalik_ufs.js:817:24)   at [object Object].methodsMap.(anonymous function) (/app/bundle/programs/server/packages/rocketchat_lib.js:1276:26)   at [object Object].methodMap.(anonymous function) (packages/rocketchat_monitoring.js:2731:30)   at maybeAuditArgumentChecks (/app/bundle/programs/server/packages/ddp-server.js:1857:12)   at /app/bundle/programs/server/packages/ddp-server.js:903:20   at [object Object].EVp.withValue (packages/meteor.js:1134:15)   at /app/bundle/programs/server/packages/ddp-server.js:902:47   at [object Object].EVp.withValue (packages/meteor.js:1134:15)   at /app/bundle/programs/server/packages/ddp-server.js:901:46   at [object Object]._.extend.protocol_handlers.method (/app/bundle/programs/server/packages/ddp-server.js:874:21)   at /app/bundle/programs/server/packages/ddp-server.js:753:85      - - - - -   at Request.extractError (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/services/s3.js:577:35)   at Request.callListeners (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/sequential_executor.js:105:20)   at Request.emit (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/sequential_executor.js:77:10)   at Request.emit (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/request.js:683:14)   at Request.transition (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/request.js:22:10)   at AcceptorStateMachine.runTo (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/state_machine.js:14:12)   at /app/bundle/programs/server/npm/node_modules/aws-sdk/lib/state_machine.js:26:10   at Request.<anonymous> (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/request.js:38:9)   at Request.<anonymous> (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/request.js:685:12)   at Request.callListeners (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/sequential_executor.js:115:18)   at Request.emit (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/sequential_executor.js:77:10)   at Request.emit (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/request.js:683:14)   at Request.transition (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/request.js:22:10)   at AcceptorStateMachine.runTo (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/state_machine.js:14:12)   at /app/bundle/programs/server/npm/node_modules/aws-sdk/lib/state_machine.js:26:10   at Request.<anonymous> (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/request.js:38:9)   at Request.<anonymous> (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/request.js:685:12)   at Request.callListeners (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/sequential_executor.js:115:18)   at callNextListener (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/sequential_executor.js:95:12)   at IncomingMessage.onEnd (/app/bundle/programs/server/npm/node_modules/aws-sdk/lib/event_listeners.js:269:13)   at emitNone (events.js:72:20)   at IncomingMessage.emit (events.js:166:7)   at endReadableNT (_stream_readable.js:923:12)   at nextTickCallbackWith2Args (node.js:511:9)   at process._tickDomainCallback (node.js:466:17)
paulovitin commented 6 years ago

I had the same problem in another project. Just encode file name with encodeURI and solve this. This solution works for me using S3 sdk.

paulovitin commented 6 years ago

If ok, I could send a PR to this @glesio.

glesio commented 6 years ago

Thank you for collaboration.