Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

File Upload #33

Open
vladinator1000 opened this issue Sep 21, 2017 · 7 comments
Open

File Upload #33

vladinator1000 opened this issue Sep 21, 2017 · 7 comments

Comments

@vladinator1000
Copy link

vladinator1000 commented Sep 21, 2017

I'm working on an example repo and was wondering, what would be the simplest way to implement that? This is what I tried without GraphQL:

@app.route('/upload', methods=['POST'])
def uploadFile():
	for key in request.files:
		file = request.files[key]
		file.save(os.path.join(UPLOAD_FOLDER, file.filename))
	
	return 'uploaded'

This is what I used in Node.js, would love to do something like that for Flask in Python.

If it's not supported by flask-graphql I'd be happy to work on a pull request. Also, how would you test this without a browser, using Graphiql, Postman or something like that?

@michaelkuty
Copy link

    def mutate(cls, info, **kwargs):

        file = info.context.files.get('file', None)

@hxuanhung
Copy link

@michaelkuty can you make it work with Apollo? I got "Must provide query string." error when trying to send multipart/form-data; to the server.

@michaelkuty
Copy link

In apollo you must use something like middleware or something else..

@hxuanhung
Copy link

hxuanhung commented May 4, 2018

hm, have you actually worked on it? I'm using https://github.com/jaydenseric/apollo-upload-client for a client that sends multipart/form-data to the server but it seems not working.

@rshk
Copy link

rshk commented May 24, 2018

Ok, just managed to get it to work with Apollo. The problem lies with incorrect handling of the multipart-encoded request, here: https://github.com/graphql-python/flask-graphql/blob/master/flask_graphql/graphqlview.py#L126-L127

I sub-classed the GraphQLView to properly handle multipart/form-data, as per the spec. I also created a custom scalar field that can be used for file uploads, so no need to get files out of info.context or flask.request.

https://gist.github.com/rshk/97fd7b444e48c60218addb2b64897572

This will work with the version of flask-graphql currently in pypi; I haven't tested whith the master version yet (but should still work).

I can open a PR with the changes (I have unit tests covering that place_files_in_operations too).

@hxuanhung
Copy link

hxuanhung commented May 24, 2018

Similar to https://github.com/lmcgartland/graphene-file-upload/blob/master/graphene_file_upload/__init__.py
We can change a few things like I mentioned in lmcgartland/graphene-file-upload#3 to make it work for Flask.

@rshk
Copy link

rshk commented Jul 24, 2018

See #51

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants