Next.js 和 Ant Design Dragger:已部署实例上的文件上传失败

Posted

技术标签:

【中文标题】Next.js 和 Ant Design Dragger:已部署实例上的文件上传失败【英文标题】:Next.js & Ant Design Dragger: File upload fails on deployed instance 【发布时间】:2020-06-10 08:26:43 【问题描述】:

我正在尝试使用 React 使用 Next.js 和 Ant Design 构建文件上传。

在本地主机上,一切正常。当我部署实例并尝试上传文件时,出现以下错误:

Request URL: https://my-app.my-team.now.sh/url/for/test/
Request Method: POST
Status Code: 405 
Remote Address: 34.65.228.161:443
Referrer Policy: no-referrer-when-downgrade

我使用的 UI 如下所示:

<Dragger ...fileUploadProps>renderImageUploadText()</Dragger>

fileUploadProps 在哪里:

const fileUploadProps = 
  name: 'file',
  multiple: false,
  showUploadList: false,
  accept: 'image/png,image/gif,image/jpeg',
  onChange(info) 
    const  status  = info.file;
    if (status === 'done') 
      if (info.file.size > 2000000) 
        setUploadSizeError('File size is too large');
       else 
        handleFieldValue(API_FORM_FIELDS.PICTURE, info);
      
     else if (status === 'error') 
      setUploadSizeError(`$info.file.name file upload failed.`);
    
  ,
;

我想,这与 Next.js 的服务器端渲染有关?另一方面,它可能不会,因为当我导航到 url/for/test 时,它应该会呈现在客户端上。

您如何使用 Ant Design 和 Next.js 实现文件上传?

【问题讨论】:

我遇到了同样的问题。如果您想通了,请在此处发布您的解决方案! 【参考方案1】:

通过将 prop action="https://www.mocky.io/v2/5cc8019d300000980a055e76" 传递给 &lt;Upload/&gt; 组件来实现此功能。

ANTD 上传组件必须发出 POST 请求才能上传文件。它要么向当前 url 发出 POST 请求,结果为 405,要么向 action 属性指定的 url 发出请求。 https://www.mocky.io/v2/5cc8019d300000980a055e76 用作此网址。

【讨论】:

【参考方案2】:

受 Trey 回答的启发(并且因为我不想在域外的任何地方发送数据),我创建了一个简单返回成功的无操作 api 路由,然后指向 Ant Design &lt;Upload&gt;'s action/api/noop

/* pages/api/noop.tsx */

import  NextApiRequest, NextApiResponse  from 'next'

export default async function handler(
  req: NextApiRequest,
  res: NextApiResponse
) 
  res.status(200).end('noop')


/* Wherever I'm using <Upload /> */

<Upload
  ...otherProps
  action='/api/noop'
>

注意:这是 Next.js 特有的,可以轻松创建 API 路由。

【讨论】:

这是处理这个问题的好方法。您可能需要增加最大体型。您可以使用自定义 Config 对象执行此操作 -> nextjs.org/docs/api-routes/api-middlewares#custom-config 也为我工作。简单、干净的解决方案。

以上是关于Next.js 和 Ant Design Dragger:已部署实例上的文件上传失败的主要内容,如果未能解决你的问题,请参考以下文章

Next.js 和 Ant Design Dragger:已部署实例上的文件上传失败

如何在 Next.js 中使用自定义主题配置 Ant Design 并支持 CSS 模块功能

P10:如何使用Ant Design UI

ant design pro 当中改变ant design 组件的样式和 数据管理

初识Ant-Design

如何自定义 Ant.design 样式