TeamsFxBotCommandHandler excludes uploaded files from context.activity.attachments when the filename contains "+" and upload from device option is selected #11466
If a file contains the "+" character in its name it will not have an entry in context.activity.attachments.
I have validated this behaviour with the following file types:
.txt
.pdf
.js
I have also confirmed that:
A single "+" with or without surrounding spaces will cause the bug.
The onMessage handler of TeamsActivityHandler is also affected by the same bug.
Submitting the same file through the "Attach Cloud Files" option works - using OneDrive.
The "+" looks to be encoded as "%2B" in the contentUrl.
To Reproduce
Steps to reproduce the behavior:
Use the Command and Response sample.
Inside manifest.json, set bots.supportsFiles to true.
Inside HelloWorldCommandHandler > handleCommandReceived, add the following line:
console.log(context.activity.attachments)
It may also help to place a breakpoint on this line.
Create a text file called "test1.txt", add some contents (they are irrelevant).
Copy the previous text file and put a "+" somewhere in the name e.g. "test+1.txt" or "test + 1.txt".
Run the sample.
Upload the first text file (without the "+" in the name). select the from this device option, and enter a test message in the chat window (the message is irrelevant), send the message.
Note that attachments contains two elements (the message and the attached file).
Upload the second text file (with the "+" in the name), select the from this device option, and enter a test message in the chat window (the message is irrelevant), send the message.
Note that the attachments array only contains a single element (the message).
Expected behavior
The uploaded file to be present in turn.activity.attachments regardless of which option is used to attach it to the message.
Screenshots
Upload from device options (default):
image
Upload from device behaviour:
image
Attach cloud file options (default):
image
Attach Cloud files behaviour:
image
VS Code Extension Information (please complete the following information):
OS: Windows 11 Enterprise
Version VS Code: v1.80, Teams Toolkit v5.0.1, Node: v18.17.0,
CLI Information (please complete the following information):
OS: Windows 11 Enterprise
Version @microsoft/teamsfx v2.2.0
Additional context
package.json
@BeigeBadger - Thanks for reporting your issue. We are able to repro your issue. We have raised a bug for the same. We will update you once we get any update on it.
Steps to reproduce
Copied bug from: https://github.com/OfficeDev/teams-toolkit/issues/9366
Details from original post: Describe the bug
If a file contains the "+" character in its name it will not have an entry in context.activity.attachments.
I have validated this behaviour with the following file types:
.txt .pdf .js I have also confirmed that:
A single "+" with or without surrounding spaces will cause the bug. The onMessage handler of TeamsActivityHandler is also affected by the same bug. Submitting the same file through the "Attach Cloud Files" option works - using OneDrive. The "+" looks to be encoded as "%2B" in the contentUrl. To Reproduce Steps to reproduce the behavior:
Use the Command and Response sample. Inside manifest.json, set bots.supportsFiles to true. Inside HelloWorldCommandHandler > handleCommandReceived, add the following line: console.log(context.activity.attachments) It may also help to place a breakpoint on this line. Create a text file called "test1.txt", add some contents (they are irrelevant). Copy the previous text file and put a "+" somewhere in the name e.g. "test+1.txt" or "test + 1.txt". Run the sample. Upload the first text file (without the "+" in the name). select the from this device option, and enter a test message in the chat window (the message is irrelevant), send the message. Note that attachments contains two elements (the message and the attached file). Upload the second text file (with the "+" in the name), select the from this device option, and enter a test message in the chat window (the message is irrelevant), send the message. Note that the attachments array only contains a single element (the message). Expected behavior The uploaded file to be present in turn.activity.attachments regardless of which option is used to attach it to the message.
Screenshots Upload from device options (default): image
Upload from device behaviour: image
Attach cloud file options (default): image
Attach Cloud files behaviour: image
VS Code Extension Information (please complete the following information):
OS: Windows 11 Enterprise Version VS Code: v1.80, Teams Toolkit v5.0.1, Node: v18.17.0, CLI Information (please complete the following information):
OS: Windows 11 Enterprise Version @microsoft/teamsfx v2.2.0 Additional context package.json
{ "name": "TeamsToolkitTutorialCommandBot", "version": "1.0.0", "description": "Microsoft Teams Toolkit Command and Response Bot Sample", "engines": { "node": "16 || 18" }, "author": "Microsoft", "license": "MIT", "main": "./lib/index.js", "scripts": { "dev:teamsfx": "env-cmd --silent -f .localConfigs npm run dev", "dev": "nodemon --watch ./src --exec node --inspect=9239 --signal SIGINT -r ts-node/register ./src/index.ts", "build": "tsc --build && shx cp -r ./src/adaptiveCards ./lib/src", "start": "node ./lib/src/index.js", "watch": "nodemon --watch ./src --exec \"npm run start\"", "test": "echo \"Error: no test specified\" && exit 1" }, "repository": { "type": "git", "url": "https://github.com" }, "dependencies": { "@azure/identity": "^3.2.3", "@microsoft/teamsfx": "^2.2.0", "@types/axios": "^0.14.0", "axios": "^1.4.0", "botbuilder": "^4.18.0", "openai": "^3.3.0", "pdfjs-dist": "^3.8.162", "restify": "^10.0.0" }, "devDependencies": { "@types/node": "^14.18.54", "@types/restify": "^8.5.5", "env-cmd": "^10.1.0", "nodemon": "^2.0.7", "shx": "^0.3.4", "ts-node": "^10.4.0", "typescript": "^4.9.5" } } /
Expected behavior
NA
Actual behavior
NA
Error details
No response