Azure函数应用复制文件至文件共享时内容追加\r\n的问题求助
问题分析与解决:Azure文件共享上传后文件追加
\r\n 问题场景
使用以下PowerShell命令将Azure函数应用本地文件复制到挂载在VM中的Azure文件共享:
Set-AzStorageFileContent -Source 'C:/home/site/wwwroot/HttpTrigger2/demo.tfvars' -ShareName "storage-fileshare" -Path "Demo/Test" -Context $destctx -Force -ContentEncoding "UTF-8" #-Properties @{"ContentEncoding" = "UTF-8"}
上传后文件内容被自动追加\r\n,原文件无此内容:
- 实际得到内容:
tfv_storage_account_name="sandeep"\r\ntfv_location_storage="Brazil"\r\ntfv_account_tier="Standard"\r\n - 期望内容:
tfv_storage_account_name="sandeep" tfv_location_storage="Brazil" tfv_account_tier="Standard"
已尝试-Properties @{"ContentEncoding" = "UTF-8"}、-ContentEncoding "UTF-8"、-Encoding UTF-8等参数,问题未解决。
原因分析
核心问题是PowerShell文本文件处理的自动换行符转换:
- Windows系统默认采用CRLF(
\r\n)作为换行符,而你的源文件大概率是LF(\n)换行格式。 Set-AzStorageFileContent在读取文本文件时,PowerShell会自动将LF转换为Windows标准的CRLF,导致上传后的文件多出\r字符。- 你尝试的
-ContentEncoding、-Properties编码参数仅设置文件的HTTP内容编码属性,和本地文件读取时的换行符转换逻辑无关;-Encoding UTF-8若未搭配正确的读取模式,仍会触发换行符转换。
解决方法
1. 二进制模式上传(最稳妥)
绕过PowerShell的文本转换逻辑,直接以二进制形式读取并上传,完全保留原文件格式:
$fileBytes = [System.IO.File]::ReadAllBytes('C:/home/site/wwwroot/HttpTrigger2/demo.tfvars') Set-AzStorageFileContent -Value $fileBytes -ShareName "storage-fileshare" -Path "Demo/Test" -Context $destctx -Force
2. 指定无BOM的UTF-8编码
使用UTF8NoBOM编码参数,避免PowerShell自动转换换行符(部分PowerShell版本适用):
Set-AzStorageFileContent -Source 'C:/home/site/wwwroot/HttpTrigger2/demo.tfvars' -ShareName "storage-fileshare" -Path "Demo/Test" -Context $destctx -Force -Encoding UTF8NoBOM
3. 确认源文件换行符格式
用文本编辑器(如VS Code)查看源文件右下角的换行符标识:
- 若显示
LF,则验证了上述转换问题; - 若显示
CRLF,则需检查VM挂载文件共享时的文件系统适配设置(此情况极少)。
内容的提问来源于stack exchange,提问作者SANDEEP KUMAR
相关产品推荐
相关产品推荐

