文件上传无照片参数问题

File Upload Nil Photo Params Issue

本文关键字:参数 问题 照片 文件      更新时间:2023-09-26

我有一个rails 4应用程序,我使用jQuery文件上传发送请求到载波。我的代码看起来像:

<input name='photo[image]' type='file' data-url='photos/create' multiple="true" class='fileupload'/>

和jquery:

$('.fileupload').fileupload({
    dataType: 'json',
    done: function (e, data) {
      $.each(data.result.files, function (index, file) {
        alert(file.name);
      });
    }
});

和我在照片控制器中的创建动作:

def create
@photo = Photo.new(photo_params)
respond_to do |format|
  if @photo.save
    format.json { render json: @photo }
  else
    format.json { render json: @photo.errors, status: :unprocessable_entity }
  end
end
end
private
   def photo_params
     params.require(:photo).permit!
   end

and my Photo model:

class Photo < ActiveRecord::Base
  mount_uploader :image, ImageUploader
end

当我创建一张照片时,载波正确地创建了一张图像(在公共/上传目录中),但由于某种原因,我的jQuery出现了错误:

Uncaught TypeError: Cannot read property 'length' of undefined

我不确定是什么引起的?

我应该留下评论,但是我没有足够的声誉,所以我道歉。

我认为你只需要使用数据。文件而不是data.result.files

这样的

$('.fileupload').fileupload({
    dataType: 'json',
    done: function (e, data) {
      $.each(data.files, function (index, file) {
        alert(file.name);
      });
    }
});

在我看来,您响应的json没有done回调期望的结构。由于它在data.result.files上调用each,我认为响应需要更结构化如下:

render json: {result: { files: [@photo] } } .

你也可以通过在回调

中将返回的数据记录到javascript控制台来调试它

done: function(e, data) { console.log(data) }

data对象的结构显示results字段参数为一个对象,包含各种与文件无关的字段;所以data.result.files的结果是错误的.each()

使用如下:

$.each(data.files, function (index, file) {
   alert(file.name);
});

工作演示(删除了服务器端代码来捕获对象,只需修改上面的代码)

首先试着探索你的参数。文件可能被保存到tmp作为临时文件,需要额外的操作来移动/重命名