Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
3.9k views
in Technique[技术] by (71.8m points)

跨域上传文件

两个web服务器,一个用来上传文件,一个接收文件。在 chrome 中本地环境下配置好 CORS 是没有问题的。但是到了线上,两个不同的域名,在上传文件时有些文件类型可以上传比如 txt文件、png图片,但是有些文件上传不了,比如ppt,上传会报错。

跨域错误

这是文件服务器的 CORS 配置:

const whitelist = [
    'http://manager.xxx.cn'
];
const CORS_OPTIONS = {
    origin: whitelist,
    optionsSuccessStatus: 200,
    allowedHeaders: ['content-type', 'authorization'],
    methods: ['GET', 'PUT', 'POST', 'DELETE'],
    credentials: true
};

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors(CORS_OPTIONS));
// ...

我想上传任意类型的文件,在 input 中配置了 accept 也是不行。不知道与 Nginx 有没有关系,这是 Nginx 配置:

image

不知道该怎么解决,困扰了两天 ?


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

刚发布问题,现在好像知道问题所在了。Nginx 配置有问题,默认情况下,Nginx设置请求的body大小是 1M,我因为没有配置,导致上传的文件如果大于 1M 时就会报错。在 location 中设置一下就可以成功上传文件了。

location /api {
    client_max_body_size 100m;
    # ...
}

在线上跑了一下,没有错误了,应该就是这个问题导致的。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...