nazirov91 / ra-strapi-rest

React Admin data provider for Strapi.js
125 stars 40 forks source link

ImageInput causes CastError: Cast to ObjectId failed for value "[]" at path "avatar" #24

Closed twoolworth closed 4 years ago

twoolworth commented 4 years ago

I am working on a small example application to get familiar with Strapi and React-Admin and am attempting to upload an image using the ImageInput component. I feel like I've read your documentation at https://github.com/nazirov91/ra-strapi-rest#file-upload and React-Admins at ImageInput at https://marmelab.com/react-admin/Inputs.html.

Right now I only have a single field that allows file upload so my App.js has:

const uploadFields = ["avatar"];

And is being passed in verbatim as what you've written in the documentation:

const dataProvider = simpleRestProvider('http://localhost:1337', httpClient, uploadFields);

For my create screen I also have your code verbatim as:

<ImageInput source="avatar" label="Avatar" accept="image/*">
     <ImageField source="url" title="name" />
</ImageInput>

Inside of my person.settings.json the field is referenced as:

"avatar": {
  "model": "file",
  "via": "related",
  "allowedTypes": [
    "images"
  ],
  "plugin": "upload",
  "required": false
},

Whenever I hit save on the form I see the following error logged from the server:

error CastError: Cast to ObjectId failed for value "[]" at path "avatar"
at new CastError (server\node_modules\mongoose\lib\error\cast.js:39:11)
at ObjectId.cast (server\node_modules\mongoose\lib\schema\objectid.js:246:11)

When I inspect the post request I do see it sending an empty array as the field which makes me think that's likely where the error is coming from, the POST request is:

-----------------------------3577480103102910508985816256
Content-Disposition: form-data; name="data"

{"fullname":"Bob Smith","avatar":[]}
-----------------------------3577480103102910508985816256--

I think this is an issue with how the uploaded files are being mapped to the fields but first wanted to see if you saw anything I had missed. I also wanted to thank you for providing the ra-strapi-rest as it did save me a ton of time in getting an example application up and running with React-Admin

nazirov91 commented 4 years ago

Hi @twoolworth, thanks for reporting this issue.

Is the upload functionality working for multiple images?

nazirov91 commented 4 years ago

Closing for no response

wvanooijen92 commented 3 years ago

@nazirov91 I am running into this problem as well, it goes away when I change this to

        if(existingFileIds.length === 1){
            data[fieldName] = existingFileIds[0]; 
        }else if (existingFileIds.length > 1) {
            data[fieldName] = [...existingFileIds];
        }

I am not sure that this will play nice in all scenarios tho, maybe you have more insight on this.