PayloadTooLargeError
I'm creating an OpenSaas document application. When the user uploads a file, it sends the file to the operations.ts backend for processing. However, I'm getting a "PayloadTooLargeError: request entity too large" error, even when trying to upload an 80kb file. I created a serverSetup.js file and added
"export const serverSetup = () => {
app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb' , extended: true }));
}"
but I still get the error. How can I fix this? Any help would be appreciated.
This is the upload function in the backend:
export const uploadDocument = async (args: {
fileBase64: string;
metadata: { fileName: string; fileType: string; fileSize: number; };
user_id: string;
labels: string;
}, context: any) => {
//... etc
16 Replies
Hi @Kynetix. I'm kapa.ai, your friendly support bot. I will try to answer your question by searching through the knowledge base. :wave:
----------------------
Based on the knowledge sources provided, it seems like you're encountering a
PayloadTooLargeError
when trying to upload a file in your OpenSaas document application. This error typically occurs when the size of the HTTP request body exceeds the limit specified by the server.
In your serverSetup.js
file, you've set the limit to '50mb' for both JSON and URL-encoded data. However, the file upload operation you're performing might be using multer
or another middleware for handling multipart/form-data
, which is commonly used for file uploads.
In the Github Issue (closed): Api can't handle FormData > Comments Part 1 (https://github.com/wasp-lang/wasp/issues/1683), a user shared a solution for handling file uploads using multer
. You might need to configure multer
or your file handling middleware to accept larger files.
Here's an example of how to set up multer
:
In this example, multer
is configured to accept single file uploads with a maximum size of 50MB. You can adjust the fileSize
limit as needed.
Please note that this is a general suggestion based on the information provided in the knowledge sources. You might need to adjust the code to fit your specific use case. If the problem persists, it would be helpful to check the entire stack trace of the error and any other error messages you might be receiving.
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------
Sorry @Kynetix, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist:
Perhaps try again in 15mins?@kapa.ai thanks for the suggestion. Where would I put that code from above? In the operations.ts file?
Let me check the knowledge base for you again. One moment! :books:
----------------------
The code provided should be placed in a separate file that is responsible for configuring your server middleware. In the Wasp framework, this is typically done in a file named
serverSetup.js
or similar.
Once you've created this middleware configuration, you need to ensure it's being used by your Wasp application. This is typically done in the main.wasp
file.
Here's an example of how you might include it in main.wasp
:
In this example, serverSetup.js
is the file where you've defined your multer
configuration (the code I provided in the previous message). This tells Wasp to use the server setup you've defined in that file.
Please note that the exact details might vary depending on your project structure and setup. If you're still having trouble, I recommend checking the Wasp documentation (https://wasp-lang.dev/docs) for more information on configuring server middleware.
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------
Sorry @Kynetix, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist:
Perhaps try again in 15mins?@kapa.ai I've set it up as suggested, by adding the export const serverMiddlewareFn() to serverSetup.js, and adding it as a server:{} attribute in main.wasp. When I run it, I get the error " TypeError: Cannot read properties of undefined (reading 'values')" at globalMiddlewareConfigForExpress () in globalMiddleware.ts.
Let me check the knowledge base for you again. One moment! :books:
----------------------
The error message "TypeError: Cannot read properties of undefined (reading 'values')" suggests that there might be an issue with how the middleware is being configured or imported.
In the
serverSetup.js
file, make sure you're exporting the middleware function correctly:
Then, in your main.wasp
file, you should import this function like so:
Ensure that the path to serverSetup.js
is correct and that serverMiddlewareFn
is being exported correctly from that file.
If you're still encountering issues, it might be helpful to check the entire stack trace of the error for more information. It's also worth noting that the Wasp framework is still in the alpha stage, so there might be some bugs or issues that need to be resolved. If you believe this is the case, consider opening an issue on the Wasp GitHub repository (https://github.com/wasp-lang/wasp/issues).
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------
Sorry @Kynetix, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist:
Perhaps try again in 15mins?Thanks @kapa.ai that fixed it (the missing 'return'). However when I try to upload, I still get the PayloadTooLargeError. Is there a way to confirm that multer is correctly configured?
Let me check the knowledge base for you again. One moment! :books:
----------------------
To confirm that
multer
is correctly configured, you can add some logging to your middleware configuration function. This can help you verify that the function is being called and that the multer
configuration is being set correctly.
Here's an example of how you might add logging:
When you run your application, you should see the log messages in your console if the function is being called correctly.
If you're still encountering the PayloadTooLargeError
, it might be worth checking the size of the file you're trying to upload. The limit in the multer
configuration is set to 50MB, so any files larger than this will cause an error.
If the file size is not the issue, there might be another part of your application that's causing the problem. For example, if you're using another middleware that also handles file uploads, it might be interfering with multer
. It could also be an issue with how the file data is being sent from the client side.
If you're still having trouble, consider seeking help from the Wasp community or opening an issue on the Wasp GitHub repository (https://github.com/wasp-lang/wasp/issues).
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------
Sorry @Kynetix, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist:
Perhaps try again in 15mins?Thanks again, @kapa.ai I've made the update and the " PayloadTooLargeError: request entity too large" error persists. Do I need to make any changes to the frontend or backend? Right now, the frontend calls an uploadDocument() function in the operations.ts, passing the file and metadata, etc.
Let me check the knowledge base for you again. One moment! :books:
----------------------
The
PayloadTooLargeError
error typically indicates that the size of the HTTP request body exceeds the limit specified by the server. This limit is set in the server configuration, and in your case, it's being set by the multer
middleware in your serverSetup.js
file.
If you're still encountering this error after correctly configuring multer
, it's possible that there might be an issue with how the file data is being sent from the client side or processed on the server side.
On the client side, ensure that the file is being sent as multipart/form-data
. This is the standard way of sending file data over HTTP, and it's what multer
expects. If you're using a library like axios
to send the request, you can create a FormData
instance, append your file to it, and then send that as the request body.
Here's an example:
On the server side, ensure that multer
is being used in the correct place to handle the file upload. If you're defining a custom route for the file upload, you might need to use multer
as a middleware for that specific route.
If you're still having trouble, consider seeking help from the Wasp community or opening an issue on the Wasp GitHub repository (https://github.com/wasp-lang/wasp/issues). They might be able to provide more specific guidance based on your exact setup and codebase.
----------------------
Note: you can ask me a follow up question by @ mentioning me again :speech_balloon:
----------------------
Sorry @Kynetix, I seem to be having a bit of trouble. Don't worry though, I've pinged my support and they will try to fix me up! :technologist:
Perhaps try again in 15mins?Hey Knetix, do you mind sharing the backend operation you're using to upload the file with multer?
also, are you using the FileUpload with AWS S3 provided in Open SaaS? or are you setting up your own File Upload with Multer on your server (if so, follow this guide from our docs; https://docs.opensaas.sh/guides/file-uploading/#using-multer-to-upload-files-to-your-server ) ?
OpenSaaS.sh
File Uploading
Open SaaS is a free, open-source, full-stack SaaS starter kit for React + NodeJS.
However, since you're using Open SaaS and probably want to provide more robust file uploads for your users, I'd suggest you use S3 and follow this guide: https://docs.opensaas.sh/guides/file-uploading/#using-aws-s3
OpenSaaS.sh
File Uploading
Open SaaS is a free, open-source, full-stack SaaS starter kit for React + NodeJS.
Also, could you share the code for your serverSetupFn and the definiton in your main Wasp config file? Double check that you're importing it correctly, as one user had this issue: https://discord.com/channels/686873244791210014/1276521669661429832/1277604845141884929
Hi @Vinny (@Wasp) here's the serverSetupFn. I ended up not needing multer - it wasn't the file upload size that was the issue. It was the size of the uploaded file being passed from the UI to the backend for processing, so the file parameter was too big.
To fix it, i used
app.use(express.json({ limit: '50mb' }));
I'm not uploading the file to S3 - I just upload it so as to read it into Supabase, so no need to store it anywhere.
ok glad you got it fixed!