react使用axios实现上传下载功能

本文实例为大家分享了react使用axios实现上传下载的具体代码,供大家参考,具体内容如下

废话不多说,直接上干货

上传文件前台代码

上传也可以使用Antd前台库的上传组件直接上传,但博主没有使用,尝试自己去实现了这个功能

import React, { Component } from 'react'
import Axios from 'axios'

export default class upload extends Component {
   
    uploadFile = ()=>{
        let file1 = document.querySelector('#input').files[0]
        let formdata = new FormData()
        formdata.append("file", file1)   
        Axios({
            url:'/api/importExcel',
            method: 'post',
            headers:{'Content-Type':'multipart/form-data'},
            data:formdata
        }).then(
            request =>{
                console.log(request.data)
            },
            error =>{
                console.log(error.data)
            }
        )
    }

    render() {
        return (
            <div>
                 <input type="file" id="input" ></input>
                 <button onClick={this.uploadFile}>上传</button>
            </div>
        )
    }
}

后台代码:

```java
@RequestMapping(value = "importExcel", method = RequestMethod.POST)
    private String importExcel(HttpServletRequest request) throws JsonProcessingException {
        boolean result = false;
        MultipartHttpServletRequest params = ((MultipartHttpServletRequest) request);
        List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
        MultipartFile file = null;
        BufferedOutputStream stream = null;
        for (int i = 0; i < files.size(); ++i) {
            file = files.get(i);
            if (!file.isEmpty()) {
                try {
                    byte[] bytes = file.getBytes();
                    stream = new BufferedOutputStream(new FileOutputStream(
                            new File(uploadFilePath + File.separatorChar + file.getOriginalFilename())));
                    stream.write(bytes);
                    stream.flush();
                    stream.close();
                    result = true;
                } catch (Exception e) {
                    System.out.println(e);
                } finally {
                    stream = null;
                }
            }
        }
        return "success"
    }

下载文件前台代码

下载文件的部分信息,博主放到了返回报文的报文头中,大家可以通过在前台打印response就可以看到前台的response的结构,大家也可以放到response报文中的其他地方,博主没有尝试

```java
import React, { Component } from 'react'
import Axios from 'axios'

export default class download extends Component {

    downLoad = () => {
        Axios(
            {
                url: '/api/exprotFile',
                method: 'post',
                responseType: 'blob',
                data: { 'name': '123' }
            }
        ).then(
            response => {
                let url = window.URL.createObjectURL(response.data);
                let eleLink = document.createElement('a');
                eleLink.href = url;
                eleLink.download = `${response.headers.filename}`;
                document.body.appendChild(eleLink);
                eleLink.click();
                window.URL.revokeObjectURL(url);
            },
            error => {
                console.log(error.data)
            }
        )
    }

    render() {

        return (
            <div>
                <button onClick={this.downLoad}> 下 载 </button>
            </div>
        )
    }
}

后台代码

@RequestMapping(value = "exprotFile", method = RequestMethod.POST)
    @ResponseBody
    private ResponseEntity<FileSystemResource> exportFile(@RequestBody String jsonStr) {
        File file = new File("F:\\uploadFile\\test.txt");
        HttpHeaders headers = new HttpHeaders();
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
        headers.add("Content-Disposition");
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");
        headers.add("Last-Modified", new Date().toString());
        headers.add("ETag", String.valueOf(System.currentTimeMillis()));
        headers.add("filename", file.getName());
        return ResponseEntity.ok().headers(headers).contentLength(file.length())
                .contentType(MediaType.parseMediaType("application/octet-stream")).body(new FileSystemResource(file));
    }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • react quill中图片上传由默认转成base64改成上传到服务器的方法

    使用react-quill富文本编辑器,里面处理图片是默认转成base64,提交到后台的时候文件太大,因此这里改写处理image的逻辑,改成上传到服务器. 具体代码如下: 配置1 import Quill from 'quill' import ReactQuill from 'react-quill' import 'react-quill/dist/quill.core.css' import 'react-quill/dist/quill.snow.css' import QuillEmo

  • React+ajax+java实现上传图片并预览功能

    之前有在网上找ajax上传图片的资料,大部分的人写得都是用jQuery,但是在这里用JQuery就大才小用了,所以我就自己写了,先上图. 由上图,首先点击上面的选择文件,在选择图片之后,将会自动上传图片到服务器,并且返回图片名字和图片在服务器的路径,然后在页面显示文件名字和图片. 源码:ajax上传预览 React中: import React from 'react'; import Http from './http' const URL = 'http://localhost:8080/f

  • React实现阿里云OSS上传文件的示例

    简介 阿里云 OSS 是 阿里云提供的海量.安全.低成本.高可靠的云存储服务,提供 99.9999999999%的数据可靠性(号称).能够使用 RESTful API 可以在互联网任何位置存储和访问,支持容量和处理能力弹性扩展. 基本术语 1.bucket :类似本地的一个文件夹 2.object : oss 存储数据的基本单元,类似本地的一个文件. 3.region:oss 存储的数据中心所在区域 4.Endpoint:oss 对外服务的访问域名,oss 以 http api 提供服务,不同

  • ReactNative实现图片上传功能的示例代码

    最近在学习ReactNative,ReactNative可以基于目前大热的开源JavaScript库React.js来开发iOS和Android原生App,今天就学习一下ReactNative实现图片上传功能 在查看ReactNative的官方文档的时候,你会发现其实Fackbook是没有提供图片上传功能的. 如果我们的项目里需要使用图片上传(用js 实现图片上传),那我们有没有什么办法呢? 通过搜索React-native的github, 会发现里面有这么一篇文章:https://github

  • React获取Java后台文件流并下载Excel文件流程解析

    记录使用blob对象接收java后台文件流并下载为xlsx格式的详细过程,关键部分代码如下. 首先在java后台中设置response中的参数: public void exportExcel(HttpServletResponse response, String fileName, String sheetName, List<String> titleRow, List<List<String>> dataRows) { OutputStream out = nu

  • React Native使用fetch实现图片上传的示例代码

    本文介绍了React Native使用fetch实现图片上传的示例代码,分享给大家,具体如下: 普通网络请求参数是JSON对象 图片上传的请求参数使用的是formData对象 使用fetch上传图片代码封装如下: let common_url = 'http://192.168.1.1:8080/'; //服务器地址 let token = ''; //用户登陆后返回的token /** * 使用fetch实现图片上传 * @param {string} url 接口地址 * @param {J

  • react native实现往服务器上传网络图片的实例

    如下所示: let common_url = 'http://192.168.1.1:8080/'; //服务器地址 let token = ''; //用户登陆后返回的token /** * 使用fetch实现图片上传 * @param {string} url 接口地址 * @param {JSON} params body的请求参数 * @return 返回Promise */ function uploadImage(url,params){ return new Promise(fun

  • React中上传图片到七牛的示例代码

    之前有写过类似的一篇文章,有位同学突然找来解惑,发现自己采用了另外的一个方法,这里也分享下,希望对使用reactjs的同学有帮助. 逻辑思路是这样子的,在componentDidMount中实现更新dom的操作,异步加载需要的资源文件,然后在加载完后实现qiniu的初始化操作.这里就不需要在webpack或者其他打包工具中去引入qiniu的包文件,导致打完包的文件过大了. 我这里使用了nodejs的库scriptjs, const $S = require('scriptjs'); 可以实现异步

  • 基于Node的React图片上传组件实现实例代码

    写在前面 红旗不倒,誓把JavaScript进行到底!今天介绍我的开源项目 Royal 里的图片上传组件的前后端实现原理(React + Node),花了一些时间,希望对你有所帮助. 前端实现 遵循React 组件化的思想,我把图片上传做成了一个独立的组件(没有其他依赖),直接import即可. import React, { Component } from 'react' import Upload from '../../components/FormControls/Upload/' /

  • react-native-fs实现文件下载、文本存储的示例代码

    本文内容: react-native-fs的简单使用 下载文件(图片.文件.视频.音频) 将文本写入本地 txt 读取txt文件内容 在已有的txt上添加新的文本 删除文件 上传文件 only iOS github链接: https://github.com/itinance/react-native-fs 另外还有一个下载的库 :https://github.com/wkh237/react-native-fetch-blob 安装步骤 第一步: npm install react-nativ

随机推荐