在我的Ruby on Rails应用程序中,我试图通过Base64格式的POSTMAN REST客户端上传一张图像。当我张贴图像时,我得到了406不可接受的响应。当我检查我的数据库,图像在那里,并成功保存。

这个错误的原因是什么,我需要在我的头文件中指定什么吗?

我的要求:

URL——http://localhost:3000/exercises.json

标题:

Content-Type  -  application/json

原始数据:

{
    "exercise": {
        "subbodypart_ids": [
            "1",
            "2"
        ],
        "name": "Exercise14"
    },
    "image_file_name": "Pressurebar Above.jpg",
    "image":"******base64 Format*******"
}

当前回答

将报头更改为接受:*/*解决了我的问题,并确保您没有任何其他接受报头

其他回答

您提到您正在使用Ruby on Rails作为后端。你没有发布相关方法的代码,但我猜它看起来像这样:

def create
  post = Post.create params[:post]
  respond_to do |format|
    format.json { render :json => post }
  end
end

改为:

def create
  post = Post.create params[:post])
  render :json => post
end

它会解决你的问题。这对我很有用:)

你的行动没有失败。

后端服务表示它返回的响应类型没有在客户端请求中的Accept HTTP报头中提供。

裁判:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields

找出服务返回的响应(内容类型)。 在请求Accept标头中提供此(内容类型)。

http://en.wikipedia.org/wiki/HTTP_status_code -> 406

“有时”这可能意味着服务器有一个内部错误,并希望响应一个错误消息(例如:500与JSON有效负载),但由于请求头没有说它接受JSON,它返回一个406。图。(在本例中为spring boot webapp)。

这样的话,你的行动确实失败了。但失败的信息被另一条信息掩盖了。

406不可接受 由请求标识的资源只能生成具有内容特征的响应实体 根据请求中发送的接受标头可接受。

406发生在服务器无法响应请求中指定的accept-header时。 在您的情况下,响应的application/json似乎不能被服务器接受。

如果你正在使用'request.js',你可能会使用以下代码:

var options = {
  url: 'localhost',
  method: 'GET',
  headers:{
    Accept: '*/*'
  }
}

request(options, function (error, response, body) {
  ...
})