保存图像时rubied中的IOError(关闭流)

时间:2016-11-12 09:25:09

标签: jquery ruby ajax

  

这里我试图使用ajax但是每个都在mysql数据库中保存图像   上传图片失败的时间,请帮我解决这个问题。

Controller.rb

def image_converter
        sub = TestimonialPicture.new
        decoded_file = Base64.decode64(params[:picdata]) unless params[:picdata].nil?
        if request.post?
          begin
            tmpfilename = "#{params[:id]}#{Time.now.to_i.to_s}"
            file = Tempfile.new([tmpfilename, '.jpg'])  
            file.binmode
            file.write decoded_file
            file.close
            sub.testimonialpic = file
            if sub.save
              sub.update_attributes(:testimonial_id => params[:tid])
              msg = "YOur image has been successfully uploaded"
            else
              msg = "Failed to create submission. Please try again"
            end
          ensure
            file.unlink
          end
          render :text=>msg
        end
      end
  

我创建的图像即将转换为画布   并通过点击保存按钮两个功能即可保存,使用它   控制器我能够获得图像,但无法存储   数据库中。

     

view.html.erb

$(document).ready(function(){
    var element = $("#bgcolor"); // global variable
    var getCanvas; // global variable

    $("#save_btn").on('click', function () {
         html2canvas(element, {
         onrendered: function (canvas) {
                $("#previewImage").append(canvas);
                getCanvas = canvas;
             }
         });
    });

    $("#btn-Convert-Html2Image").on('click', function () {
      $("#popDiv").hide();
      var picdata = getCanvas.toDataURL("image/png");
      var pic = picdata.replace(/^data:image\/(png|jpg);base64,/, ""); 
        var tid = $("#tid").val();
        $.ajax({ 
          url: "/businessdb/image_converter",
          type: "POST",
          data: {"pic" : pic, "tid" : tid},
          dataType: "json",
          success: function(data) {
            location.reload();
            alert("success");
          }
        });
    });
  

每次我收到类似IOError(封闭流)的错误

     

我需要点击保存按钮

将我的图片保存到mysqldatabase中

1 个答案:

答案 0 :(得分:1)

有问题的行是

file.close
sub.testimonialpic = file

mysql2尝试将IO保存到BLOB列时,必须打开IO才能阅读。您只需在保存文件之前显式关闭该文件(即IO)。

解决方案是

file.rewind
sub.testimonialpic = file

并在ensure版块unlink之前关闭该文件。