Skip to content

Commit 338d3f3

Browse files
authored
Add mitigation for file names containing non ASCII characters (Azure#50195)
1 parent 154b751 commit 338d3f3

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

sdk/ai/Azure.AI.Agents.Persistent/src/Custom/PersistentAgentsFiles.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System;
55
using System.Collections.Generic;
66
using System.IO;
7+
using System.Text.RegularExpressions;
78
using System.Threading;
89
using System.Threading.Tasks;
910
using Azure.Core;
@@ -59,6 +60,7 @@ public virtual async Task<Response<PersistentAgentFileInfo>> UploadFileAsync(Str
5960
Argument.AssertNotNull(data, nameof(data));
6061
Argument.AssertNotNullOrEmpty(filename, nameof(filename));
6162

63+
filename = ReplaceNonAscii(filename);
6264
UploadFileRequest uploadFileRequest = new UploadFileRequest(data, purpose, filename, null);
6365
using MultipartFormDataRequestContent content = uploadFileRequest.ToMultipartRequestContent();
6466
RequestContext context = FromCancellationToken(cancellationToken);
@@ -77,13 +79,25 @@ public virtual Response<PersistentAgentFileInfo> UploadFile(Stream data, Persist
7779
Argument.AssertNotNull(data, nameof(data));
7880
Argument.AssertNotNullOrEmpty(filename, nameof(filename));
7981

82+
filename = ReplaceNonAscii(filename);
8083
UploadFileRequest uploadFileRequest = new UploadFileRequest(data, purpose, filename, null);
8184
using MultipartFormDataRequestContent content = uploadFileRequest.ToMultipartRequestContent();
8285
RequestContext context = FromCancellationToken(cancellationToken);
8386
Response response = UploadFile(content, content.ContentType, context);
8487
return Response.FromValue(PersistentAgentFileInfo.FromResponse(response), response);
8588
}
8689

90+
/// <summary>
91+
/// Remove non ASCII symbols from the file name.
92+
/// Temporary workaround of an issue when the file contains non ASCII characters.
93+
/// </summary>
94+
/// <param name="filename">The file name.</param>
95+
/// <returns>The file name with all non ASCII letters replaced.</returns>
96+
private static string ReplaceNonAscii(string filename)
97+
{
98+
return Regex.Replace(filename, @"[^\u0000-\u007F]", "~");
99+
}
100+
87101
/// <summary> Uploads a file for use by other operations. </summary>
88102
/// <param name="body"> Multipart body. </param>
89103
/// <param name="cancellationToken"> The cancellation token to use. </param>

0 commit comments

Comments
 (0)