因此,我有一个react前端,它负责获取输入,为我的应用程序创建一个新用户。当用户提交表单时,它会击中后端服务器。在这种形式下,我有一个文件输入,允许用户选择一个化身。在后端,我使用rails活动存储处理将映像保存到aws。这里的问题是,我想将图像保存为用户状态下的嵌套支柱。因此,给出了UserForm组件的构造方法;

我有一些文字输入的全名,电子邮件和密码和一个文件输入的化身。其想法是抓取所有这些,并将其作为格式数据发送到rails后端。然后,我可以抓取整个用户参数并在后端创建一个新用户。
这是我的输入:

这是用户输入文本字段时的代码。它将输入保存到用户状态的嵌套状态:

问题是当我试图附加图像并将其保存在User.avatar状态下时。

当我执行Console.log(文件)时,我得到了正确的结果,它显示了图像:

但是,当我检查状态User.Avatar时,它会显示这一点。user.avatar是一个空对象!

但是,如果我直接将图像设置在这样的顶级状态上:

文件的状态显示得很好:

知道为什么会这样吗?太奇怪了!
编辑1
根据Ilia下面的解决方案,只需将其发送到后端即可。因此,假设我将其发送到后端,将其保存在用户对象下的状态下。这是我的代码,可以这样做:
submitUser = async () => {
let formData = new FormData();
formData.set("user", JSON.stringify(this.state.user));
const res = await axios({
method: 'post',
url: '/users/',
data: formData,
headers: {
'content-type': `multipart/form-data; boundary=${formData._boundary}`,
},
});在我的rails后端:
def create
@user = User.new(user_params)
if @user.save
flash[:notice] = "Welcome #{@user.full_name}"
render json: { status: true }
session[:user_id] = @user.id
else
flash[:error] = "Please fix the following error(s)"
render json: { error: @user.errors.messages }
end
end我的strogn params正在处理params (这里的调试代码):
def user_params
json_params = ActionController::Parameters.new( JSON.parse(params[:user]) )
binding.pry
res = json_params.require(:user).permit(:email, :full_name, :password)
res
end我的化身是一个空的讣告。

我不知道你把它当成图像源是什么意思?
发布于 2020-04-05 15:33:32
我以前遇到过同样的问题,状态实际上是保存文件值,但由于未知的原因(对我来说)它没有显示,发送到后端,您将看到该文件被正确地接收,您可以设置它作为图像源,以确保该文件是实际收到的!
https://stackoverflow.com/questions/61044978
复制相似问题