首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >let files = event.target.files;没有文件

let files = event.target.files;没有文件
EN

Stack Overflow用户
提问于 2018-07-19 18:44:33
回答 1查看 7.2K关注 0票数 0

我有以下react组件,但在for语句中,它从未进入for循环,如文件数组为空,因此文件永远不会发送到服务器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React, { Component } from 'react';
import { Row, Col } from 'antd';
import PageHeader from '../../components/utility/pageHeader';
import Box from '../../components/utility/box';
import LayoutWrapper from '../../components/utility/layoutWrapper.js';
import ContentHolder from '../../components/utility/contentHolder';
import basicStyle from '../../settings/basicStyle';
import IntlMessages from '../../components/utility/intlMessages';
import { adalApiFetch } from '../../adalConfig';

export default class extends Component {
  constructor(props) {
    super(props);
    this.state = {TenantId: '', TenantUrl: '', TenantPassword: '' };
    this.handleChangeTenantUrl = this.handleChangeTenantUrl.bind(this);
    this.handleChangeTenantPassword = this.handleChangeTenantPassword.bind(this);
    this.handleChangeTenantId= this.handleChangeTenantId.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  };


  handleChangeTenantUrl(event){
    this.setState({TenantUrl: event.target.value});
  }

  handleChangeTenantPassword(event){
    this.setState({TenantPassword: event.target.value});
  }

  handleChangeTenantId(event){
    this.setState({TenantId: event.target.value});
  }

  handleSubmit(event){
    event.preventDefault();

    let data = new FormData();
    //Append files to form data
    let files = event.target.files;
    for (let i = 0; i < files.length; i++) {
      data.append("file", files[i], files[i].name);
    }

    //add other objects or params
    data.append("TenantId", this.state.TenantId);
    data.append("TenantUrl", this.state.TenantUrl);
    data.append("TenantPassword", this.state.TenantPassword);


    const options = {
      method: 'put',
      body: data,
      config: {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      }
    };

    adalApiFetch(fetch, "/Tenant", options)
      .then(response => response.json())
      .then(responseJson => {
        if (!this.isCancelled) {
          this.setState({ data: responseJson });
        }
      })
      .catch(error => {
        console.error(error);
      });
  }


  upload(e){
      let data = new FormData();
      //Append files to form data
      let files = e.target.files;
      for (let i = 0; i < files.length; i++) {
        data.append('content', files[i], files[i].name);
      }      
  }

  render(){
    const { data } = this.state;
    const { rowStyle, colStyle, gutter } = basicStyle;

    return (
      <div>
        <LayoutWrapper>
        <PageHeader>{<IntlMessages id="pageTitles.TenantAdministration" />}</PageHeader>
        <Row style={rowStyle} gutter={gutter} justify="start">
          <Col md={12} sm={12} xs={24} style={colStyle}>
            <Box
              title={<IntlMessages id="pageTitles.TenantAdministration" />}
              subtitle={<IntlMessages id="pageTitles.TenantAdministration" />}
            >
              <ContentHolder>
              <form onSubmit={this.handleSubmit}>
                <label>
                  TenantId:
                  <input type="text" value={this.state.TenantId} onChange={this.handleChangeTenantId} />
                </label>
                <label>
                  TenantUrl:
                  <input type="text" value={this.state.TenantUrl} onChange={this.handleChangeTenantUrl} />
                </label>
                <label>
                  TenantPassword:
                  <input type="text" value={this.state.TenantPassword} onChange={this.handleChangeTenantPassword} />
                </label>
                <label>
                  Certificate:
                  <input onChange = { e => this.upload(e) } type = "file" id = "files" ref = { file => this.fileUpload } />
                </label>             
              <input type="submit" value="Submit" />
              </form>
              </ContentHolder>
            </Box>
          </Col>
        </Row>
      </LayoutWrapper>
      </div>
    );
  }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-19 19:19:15

我已经修改了所需的函数,现在应该可以工作了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
constructor(props) {
    super(props);
    this.state = {TenantId: '', TenantUrl: '', TenantPassword: '', selectedFiles: null };
    this.handleChangeTenantUrl = this.handleChangeTenantUrl.bind(this);
    this.handleChangeTenantPassword = this.handleChangeTenantPassword.bind(this);
    this.handleChangeTenantId= this.handleChangeTenantId.bind(this);
    this.handleSubmit = this.handleSubmit.bind(this);
  };

upload(e){
      let files = e.target.files;
      this.setState({ 'selectedFiles': files })
  }

handleSubmit(event){
    event.preventDefault();

    let data = new FormData();
    //Append files to form data
    let files = this.state.files;
    for (let i = 0; i < files.length; i++) {
      data.append("file", files[i], files[i].name);
    }

    //add other objects or params
    data.append("TenantId", this.state.TenantId);
    data.append("TenantUrl", this.state.TenantUrl);
    data.append("TenantPassword", this.state.TenantPassword);


    const options = {
      method: 'put',
      body: data,
      config: {
        headers: {
          'Content-Type': 'multipart/form-data'
        }
      }
    };

    adalApiFetch(fetch, "/Tenant", options)
      .then(response => response.json())
      .then(responseJson => {
        if (!this.isCancelled) {
          this.setState({ data: responseJson });
        }
      })
      .catch(error => {
        console.error(error);
      });
  }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51429828

复制
相关文章
4KB 扇区磁盘上的 Linux:实际建议
为何更改为 4096 字节扇区? 如果您熟悉磁盘结构,就知道磁盘是被分解成扇区 的,大小通常是 512 字节;所有读写操作均在成倍大小的扇区中进行。仔细查看,就会发现硬盘事实上在扇区之间包括大量额外数据,这些额外字节由磁盘固件使用,以检测和纠正每个扇区内的错误。随着硬盘变得越来越大,越来越多的数据需要存储在磁盘的每一单位面积上,导致更多低级别错误,从而增加了固件纠错功能的负担。 解决该问题的一个方法是将扇区大小从 512 字节增加为更大的值,以使用功能更强大的纠错算法。这些算法可使每个字节使用较少的数据,从
小小科
2018/05/02
3.4K2
4KB 扇区磁盘上的 Linux:实际建议
Transformers 如何模仿大脑的某些部分
来源:ScienceAI 本文约2500字,建议阅读7分钟 本文将演示如何通过阈值调优来提高模型的性能。 了解大脑如何组织和访问空间信息「我们在哪里」,「拐角处有什么」,「如何到达那里」,这仍然是一项艰巨的挑战。该过程涉及从数百亿个神经元中调用整个记忆网络和存储的空间数据,每个神经元都连接到数千个其他神经元。 神经科学家已经确定了关键元素,例如网格细胞、映射位置的神经元。但更深入将被证明是棘手的:并不是说研究人员可以移除或研究人类灰质的切片来观察基于位置的图像、声音和气味记忆是如何流动并相互连接的。 人工
数据派THU
2022/10/09
6380
Transformers 如何模仿大脑的某些部分
硬盘对数据库性能的影响
总体来讲,相当于一个i5+4G+500G传统硬盘的配置了,在当时看来还是不错的,但是不用不知道,这个AMD的使用情况不容乐观,散热问题相当严重,感觉比intel的处理器差好多,一打dota就发热,热到手都放不上去,夏天更甚。当时也不怎么卡,因为第一台电脑,我也算比较爱惜,这一用就是6年。刷机刷了无数次,安装过各种各样的软件和各种各样的操作系统,最后实在是无法挽救了。
AsiaYe
2019/11/06
2.4K0
硬盘对数据库性能的影响
[硬件]关于SPI Flash那些你不知道的事儿
以华邦W25Q128为例,详解SPI Flash的特点,读写注意事项,和地址范围等。
单片机点灯小能手
2020/07/17
5.9K0
[硬件]关于SPI Flash那些你不知道的事儿
Windows Server 2008 R2 安装 media Service 部分更新没有安装 KB963697
1、下载安装包 Windows6.1-KB963697-x64.msu 2、安装过程失败,提示未安装更新 我是阿里云的服务器,一直出现下面提示 经过反复研究,确定系统问题,重新恢复了初始系统,再进行安
阿炬
2018/05/11
1.1K0
微软确认Windows 10累积更新KB4482887中的新问题
微软刚刚确认了Windows 10版本1809累积更新KB4482887中存在的一个新问题,公司表示已收到有关游戏性能可能受到影响的报告。在对原始KB4482887页面的更新中,微软表示已经开始修复该问题,它应该包含在即将发布的版本中。
Zip
2019/03/18
5470
微软确认Windows 10累积更新KB4482887中的新问题
微软确认Windows 10累积更新KB4482887中的新问题
微软刚刚确认了Windows 10版本1809累积更新KB4482887中存在的一个新问题,公司表示已收到有关游戏性能可能受到影响的报告。在对原始KB4482887页面的更新中,微软表示已经开始修复该问题,它应该包含在即将发布的版本中。
Zip
2019/04/28
6070
微软确认Windows 10累积更新KB4482887中的新问题
【STM32F407】第5章 ThreadX NetXDUO网络协议栈介绍
本章节介绍 ThreadX NetXDUO网络协议栈,让大家对NetXDUO有一个整体的了解。
Simon223
2021/04/19
6380
【STM32F407】第5章   ThreadX NetXDUO网络协议栈介绍
【STM32F429】第5章 ThreadX NetXDUO网络协议栈介绍
本章节介绍 ThreadX NetXDUO网络协议栈,让大家对NetXDUO有一个整体的了解。
Simon223
2021/04/19
5840
【STM32F429】第5章   ThreadX NetXDUO网络协议栈介绍
FATFS中的NAND FLASH的簇和扇区
最近使用FATFS读写NANDFLASH,研究了一下小型文件系统的中的簇和扇区的具体含义,簇是文件系统使用的单位,扇区是物理介质(FLASH)使用的单位。
用户9736681
2022/05/11
1.9K0
【STM32H7】第5章 ThreadX NetXDUO网络协议栈介绍
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=104619 第5章 ThreadX NetXDUO网络协议栈介绍 本章节介绍 T
Simon223
2021/04/19
9590
【STM32H7】第5章   ThreadX NetXDUO网络协议栈介绍
拆解固态硬盘结构
前面几篇文章,主要围绕的是机械硬盘来说的。目前ssd目前应用也越来越广了,值得我们花精力琢磨琢磨。SSD硬盘是地地道道电子技术下的产品,因为不像机械硬盘IO时依赖两个耗时的机械轴行为:磁盘旋转,以及磁道寻道,SSD硬盘的访问延迟要比机械硬盘要低的多,在随机IO下的表现尤其明显。我们今天从最底层出发,看看SSD的几个内部机理。
开发内功修炼
2022/03/28
2K0
拆解固态硬盘结构
Oracle数据库部分迁至闪存存储方案
环境:Oracle 11.2.0.4 RAC(2 nodes) 说明:假设新增闪存挂载点是/flash(使用了第三方的集群文件系统),如果是使用Oracle的ASM,则本文提及的所有/flash目录都可以认定是新的闪存磁盘组是+FLASH。
Alfred Zhao
2019/05/24
5670
手机卡顿-闪存要担部分责任
手机,电脑越来越卡怎么回事!!! 小提莫粗浅的解答一下。(排除机械硬盘)机械硬盘太慢了
用户1113710
2021/06/09
8450
手机卡顿-闪存要担部分责任
解决android studio 无法更新插件的问题(某些)
我相信很有朋友会像我一样遇到这样的情况:android studio 提示插件需要更新,但是由于网络的原因,无法更新,这里笔者提供GsonFormat和genymotion的最新jar包下载地址,每次提示更新就去这里下载最新的就好了。
103style
2022/12/19
1.3K0
mysql更新字段中的部分内容
在实践中,会出现某些字段中的内容变了,比如三方提供的图标地址变了,那么或许对字段中存储的图片域名进行更新,此时就需要用到mysql更新字段中的部分内容的功能。
程序新视界
2020/05/18
2.4K0
(39)STM32——FLASH闪存
        通过这两个步骤,即可解锁 FLASH_CR,如果写入错误,那么 FLASH_CR 将被锁定,直到下次复位后才可以再次解锁。
小点点
2022/12/12
1.4K0
(39)STM32——FLASH闪存
基于STM32的Flash擦除方式
本文主要介绍STM32的内部Flash擦除方式和擦除长文件的功能函数怎样编写。并且介绍一些注意事项,如只想擦除当前地址,却发现上下地址都出现了擦除等问题。阅读完本文可以使你能够正常的完成Flash擦除。并对擦除时会影响的地址大小有一个深入的认识,并在对页擦除时,页的起始地址和大小有所了解。
跋扈洋
2022/05/31
3.4K3
基于STM32的Flash擦除方式
常见的非易失存储器简介
非易失存储器(Non-Volatile Memory,NVM)是一种能够在断电后保持存储数据的计算机存储器。
用户10524139
2023/04/22
2K0
fastapi PUT更新数据 / PATCH部分更新
learn from https://fastapi.tiangolo.com/zh/tutorial/body-updates/
Michael阿明
2022/01/07
1.4K0
fastapi PUT更新数据 / PATCH部分更新

相似问题

如何使用带256 on擦除扇区的闪存芯片上的文件系统

12

刻录到闪存的特定扇区

21

如何用C检查闪存设备的坏扇区?

20

256 KB的缓存大小真的是256 KiB吗?

49

在linux中从USB闪存访问扇区

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文