我正在尝试将图像上传到回形针并将其保存到 s3。但是,我在控制台中收到以下错误
!!处理请求时出现意外错误:UTF-8 中的字节序列无效
StackOverflow 上有一些关于如何解决这个问题的回应,尽管大多数人都指出原始解决方案是对 Rack 的更新。但是,我使用的是 Ruby 1.9.3 和 Rails 3.1.3,并且相信我没有 Rack(我没有将它作为 Gem 安装,应该吗??)。
我一直在尝试的文件名相当简单,所以我假设问题出在实际文件中,但我不确定如何调试错误来自哪个上传变量。Rails 没有将这些错误中的任何一个放在日志文件中,所以我似乎无法获得更多详细信息。
我的控制器相当简单,就像回形针 github 文档中的示例一样
定义创建 wine_photo = WinePhoto.create(params[:wine_photo]) 返回渲染:json => wine_photo 结尾
虽然最初我用的是更常见的
wine_photo - WinePhoto.new(params[:wine_photo]) 如果 wine_photo.save 返回渲染:json => wine_photo 别的 返回渲染:json => wine_photo.errors 结尾
我的模型(我怀疑这很有帮助)是
类 WinePhoto 真实 validates_with AttachmentPresenceValidator, :attributes => :photo 属于:葡萄酒 属于_to:用户 def photo_url 照片.url 结尾 结尾
基于stackoverflow上的这个响应,Ruby Invalid Byte Sequence in UTF-8,我在我的控制器中尝试了以下内容
定义创建 wine_photo = WinePhoto.new(params[:wine_photo]) wine_photo.photo = IO.read(wine_photo.photo).force_encoding("ISO-8859-1").encode("utf-8", 替换:nil) ...
但仍然有错误。
有关如何解决此编码问题的任何建议?有没有办法确认错误来自正在上传的文件?
我的上传代码(ajax)是
保存照片:函数(){ var file = document.getElementById('file_api').files[0]; 控制台.log(文件); var xhr = new XMLHttpRequest(); if (xhr.upload && file.type == "image/jpeg" ) { // 创建进度条 var o = document.getElementById("progress"); var progress = o.appendChild(document.createElement("p")); progress.appendChild(document.createTextNode("上传" + file.name)); // 进度条 xhr.upload.addEventListener("进度", function(e) { var pc = parseInt(100 - (e.loaded / e.total * 100)); progress.style.backgroundPosition = pc + "% 0"; }, 错误的); //文件接收/失败 xhr.onreadystatechange = 函数(e){ 如果(xhr.readyState == 4){ progress.className = (xhr.status == 200 ? "成功" : "失败"); } }; // 开始上传 xhr.open("POST", document.getElementById("add_photo").action, true); xhr.setRequestHeader("X_FILENAME", file.name); xhr.send(文件); } }
和参数file
是
文件 {webkitRelativePath: "", lastModifiedDate: Thu Nov 10 2011 09:40:39 GMT+1100 (AUS Eastern Summer Time), name: "WP_000012.jpg", type: "image/jpeg", size: 1344450}