44using System ;
55using System . Collections . Generic ;
66using System . IO ;
7+ using System . Text . RegularExpressions ;
78using System . Threading ;
89using System . Threading . Tasks ;
910using 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