我正在尝试将图像上传到回形针并将其保存到s3。但是,我在控制台中收到以下错误
!! Unexpected error while processing request: invalid byte sequence in UTF-8
StackOverflow上有一些关于如何解决此问题的回复,尽管大多数人指出原始解决方案是对Rack的更新。但是,我使用的是Ruby 1.9.3和Rails 3.1.3,并且相信我没有Rack(我没有将其安装为Gem,是吗??)。
我一直在尝试的文件名相当简单,所以我假设问题出在实际的文件中,但是我不确定如何调试错误来自哪个上传变量。Rails没有将这些错误放入日志文件,所以我似乎无法获得更多的细节。
我的控制器相当简单,就像回形针github留档上的例子
def create wine_photo = WinePhoto.create(params[:wine_photo]) return render :json => wine_photo end
虽然最初我用了更常见的
wine_photo - WinePhoto.new(params[:wine_photo]) if wine_photo.save return render :json => wine_photo else return render :json => wine_photo.errors end
我的模型(我怀疑它是否有帮助)是
class WinePhoto true validates_with AttachmentPresenceValidator, :attributes => :photo belongs_to :wine belongs_to :user def photo_url photo.url end end
基于堆栈溢出的响应,UTF-8中的Ruby无效字节序列,我已经在我的控制器中尝试了以下方法
def create wine_photo = WinePhoto.new(params[:wine_photo]) wine_photo.photo = IO.read(wine_photo.photo).force_encoding("ISO-8859-1").encode("utf-8", replace: nil) ...
但仍然得到错误。
关于如何解决这个编码问题,有什么建议吗?有没有办法确认错误是来自上传的文件?
我的上传代码(ajax)是
save_photo: function(){ var file = document.getElementById('file_api').files[0]; console.log(file); var xhr = new XMLHttpRequest(); if (xhr.upload && file.type == "image/jpeg" ) { // create progress bar var o = document.getElementById("progress"); var progress = o.appendChild(document.createElement("p")); progress.appendChild(document.createTextNode("upload " + file.name)); // progress bar xhr.upload.addEventListener("progress", function(e) { var pc = parseInt(100 - (e.loaded / e.total * 100)); progress.style.backgroundPosition = pc + "% 0"; }, false); // file received/failed xhr.onreadystatechange = function(e) { if (xhr.readyState == 4) { progress.className = (xhr.status == 200 ? "success" : "failure"); } }; // start upload xhr.open("POST", document.getElementById("add_photo").action, true); xhr.setRequestHeader("X_FILENAME", file.name); xhr.send(file); } }
file
的参数是
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}
经过两天的折腾,问题出在我的ajax上传上,rails根本没有得到文件字段。
我关注了这篇博客文章,让ajax上传工作,https://github.com/newbamboo/example-ajax-upload/blob/master/public/index.html
并将我输入文件中的名称更改为
< input type="file" name="wine_photo[photo]" >
html表单现在也有
<input name="utf8" type="hidden" value="✓">
问题内容: 我无法通过ajax上传多个文件。这是我的代码。 HTML代码: Ajax代码:- 当我通过Ajax调用upload_business_photo_do()函数时,它无法获取图像$ _FILES [‘file’] [‘name’]的名称 问题答案: 尝试这样使用,它简单又容易 并在控制器中使用像这样 并使用此功能将文件数据转换为多个图像数据的数组 它的工作完美,只需尝试使用它。您无需使用
问题内容: 昨天我做了一个深夜的编码会议,并创建了一个小的node.js / JS(实际上是CoffeeScript,但是CoffeeScript只是JavaScript,所以可以说是JS)应用程序。 目标是什么: 客户端(通过socket.io)将canvas datauri(png)发送到服务器 服务器将图像上传到亚马逊s3 步骤1完成。 服务器现在有一个字符串 我的问题是: 将数据“流” /
我试图上传一个图像从本地使用bas64做图像检测。 和一切正常工作在localhost和邮递员。 但部署后,我得到了CROS错误。 我已经在 cors中间件在使用url获取图像时工作正常, 但是当我试图使用bas64从本地上传图像时,控制台显示: 这是我尝试过的解决方案: cors-任何地方 然后显示。 由于在localhost和postman中测试时没有错误,我发现一些文章说这可能仍然是cors
问题内容: 我想先预览图像,然后再将其上传到服务器。我已经为其编写了一些代码,但是由于某种安全原因,它只能在Internet Explorer中预览,而不能在其他浏览器(如Safari,Chrome,Firefox)中预览。有什么解决方案可以在这些浏览器中预览图像吗? 问题答案: 对于Firefox。由于安全原因,它的路径被截断了。但是,他们提供了其他方法: 以下内容适用于Internet Exp
我正在尝试使用webview上传图像。一切正常,如预期的那样,但只有图像没有上传,当照片从相机中点击时。请帮我找到这个。我得到了一些答案,但没有帮助或没有回答,就像这个没有回答一样,这对我没有帮助,这是直接打开画廊,不适用于相机,这个没有帮助我 这是我的活动代码