使用axios从React/Redux前端将文件上载到Django时出现问题

使用axios从React/Redux前端将文件上载到Django时出现问题,django,reactjs,redux,axios,Django,Reactjs,Redux,Axios,我已经在前端使用react/redux设置了一个django项目,我需要能够从前端上传多个文件,这些文件在后端读取(不保存到数据库或任何东西),以便我可以进行一些服务器端处理。但是,我似乎无法在django请求处理程序中获取文件。我敢肯定,我的标题或发帖方式有点傻,但我读过30个类似标题的问题,我似乎无法让我的标题发挥作用 我有一个FileUploader组件,它(似乎)允许我上传文件并将它们存储在我的状态中。点击上传按钮后,我将其强制转换为formData(正如大多数django消息来源所说的

我已经在前端使用react/redux设置了一个django项目,我需要能够从前端上传多个文件,这些文件在后端读取(不保存到数据库或任何东西),以便我可以进行一些服务器端处理。但是,我似乎无法在django请求处理程序中获取文件。我敢肯定,我的标题或发帖方式有点傻,但我读过30个类似标题的问题,我似乎无法让我的标题发挥作用

我有一个FileUploader组件,它(似乎)允许我上传文件并将它们存储在我的状态中。点击上传按钮后,我将其强制转换为formData(正如大多数django消息来源所说的那样),并发出post请求

我的反应组件

export class FileUploader extends Component {
  static propTypes = {
    files: PropTypes.object.isRequired
  };

  fileSelectedHandler = event => {
    this.props.uploadFiles(event.target.files);
  };

  fileUploadHandler = event => {
    let formData = new FormData();
    formData.append("files", this.props.files);
    console.log(this.props.files);
    console.log("formData", formData);
    this.props.addSubmission(formData);
  };

  render() {
    return (
      <div className="file-uploader">
        <input type="file" multiple onChange={this.fileSelectedHandler} />
        <button onClick={this.fileUploadHandler}>Upload</button>
      </div>
    );
  }
}

const mapStateToProps = state => ({
  files: state.submissions.files
});

export default connect(
  mapStateToProps,
  { uploadFiles, addSubmission }
)(FileUploader);
My Django视图集:

class SubmissionStatsViewSet(viewsets.ModelViewSet):
    queryset = SubmissionStats.objects.all()
    permission_classes = [
        permissions.AllowAny
    ]
    serializer_class = SubmissionStatsSerializer

    @action(detail=False, methods=['post'])
    def add_submission(self, request, pk=None):
        #at this point, request.FILES is always empty


我希望接下来能够在django请求处理程序的request.files属性下访问这些文件。然而,这始终是空的,即使我的标题似乎有formData正在发送。我还尝试了其他一些建议,比如在我的axios帖子中添加enctype=“multipart/form data”标题或某些内容类型标题。我也尝试过使用一个普通的表单,放弃react/redux的东西,但是我一直没能让它工作。我想这是一件非常简单的事情,因为我不明白为什么上传文件不应该是一件简单的事情,但我在这里有点累了,似乎无法理解它。

Does
console.log(“formData”,formData)显示您的FormData中有实际数据吗?@Hybrid抱歉延迟,我的互联网中断了几天(谢谢ISP)。既然你提到了,它看起来不像。我对FormData不是很熟悉,但我的打印看起来像:FormData{},里面有原型。我是不是误用了语法?我只是遵循Mozilla文档,我也尝试过单独附加这些文件,但结果是一样的
class SubmissionStatsViewSet(viewsets.ModelViewSet):
    queryset = SubmissionStats.objects.all()
    permission_classes = [
        permissions.AllowAny
    ]
    serializer_class = SubmissionStatsSerializer

    @action(detail=False, methods=['post'])
    def add_submission(self, request, pk=None):
        #at this point, request.FILES is always empty