【问题标题】:AWS Lambda replacing certain characters from attachments of multipart-form data with replacement character(U+FFFD)AWS Lambda 用替换字符(U+FFFD)替换多部分格式数据附件中的某些字符
【发布时间】:2019-07-21 02:49:38
【问题描述】:

我正在使用 AWS lambda 函数来接收带有附件的多部分请求并将它们上传到 S3。

但是 Lambda 函数用替换字符替换了几个字符,因此附件变得损坏。

我检查了一个 PNG 文件。 示例内容:\x89PNG\r\n\u001A\n\u0000\u0000\u0000

所有字符都按原样接收,但\x89 或一般\x** 被替换字符(U+FFFD) 替换。

我将附件file_str 提取为字符串并写入文件,然后将其上传到s3。

File.open(file_path, 'w') do |f|
  f << file_str
end

提前致谢。

【问题讨论】:

  • 我的猜测是问题不在于写入文件,而在于file_str 的编码。无论在做什么,字符串编码都会强制它成为有效的 UTF-8。您需要在此过程中更早地查看
  • 你是对的。我对 rails 进行了同样的尝试,甚至在控制器中执行操作之前就出现了错误。错误:"Encoding::UndefinedConversionError: "\x89" from ASCII-8BIT to UTF-8"

标签: ruby aws-lambda multipartform-data character-replacement


【解决方案1】:

您需要开启二进制模式才能处理(写入)二进制文件。

#                      ⇓ THIS
File.open(file_path, 'wb') do |f|
  f << file_str
end

您尝试以 UTF-8 存储内容,而 \x89 不是有效的 UTF-8。

【讨论】:

  • 试过了,但它仍然给出相同的损坏文件。
  • file_str 还必须有"BINARY" 编码。
  • 但是我怎样才能首先获得二进制编码的 file_str 呢?我收到的字符串已经损坏,因为 Ruby 无法理解某些字符(因此它用替换字符替换它们)。
  • 我应该在将字符串保存到文件之前对其进行编码吗?
猜你喜欢
  • 2014-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-31
  • 2018-04-08
  • 1970-01-01
  • 2017-08-30
  • 2014-03-27
  • 2018-08-23
相关资源
最近更新 更多