下载文件 + 上传文件

这篇具有很好参考价值的文章主要介绍了下载文件 + 上传文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

记录一下js实现下载文件的方式

下载文件

方式一:a 链接下载:模拟a链接的点击,把后端返回的下载地址设置给a链接的href属性

//直接简单下载
export const downloadFile = (url: string, fileName: string) => {
  const link = document.createElement('a')       //创建一个a标签用来跳转
  link.href = url                  //url 是后端返回的下载地址
  link.download = fileName
  document.body.appendChild(link)      //将标签DOM,放置页面
  link.click()
  document.body.removeChild(link)		//释放 url 对象内存
}

2. 文件流下载

前端接收 type: “application/octet-stream“ 格式的数据并下载,还有后端既返回octet-stream还返回JSON数据时的处理方法, 后端改了一下文件下载的方式,打算用接口返回 type: “application/octet-stream“格式的数据,然后前端来处理下载。

//请求时,要注意设置响应格式
request({
    url: url,
    responseType: 'blob',   //设置响应格式
    method: "get",
    }).then(res =>{})


//转为blob下载
export const downloadBlobFile = (data: BlobPart, fileName: string) => {
//因为我这边下载的文件都是文件,所以指定 type application/octetstream
  const blob = new Blob([data], { type: 'application/octetstream' })
  const objectURL = URL.createObjectURL(blob)		//创建下载的链接
  const link = document.createElement('a')   
  link.href = objectURL
  link.download = fileName
  document.body.appendChild(link)
  link.click()			//点击下载
  URL.revokeObjectURL(objectURL)  		//释放掉blob对象
  document.body.removeChild(link) 		//下载完成移除元素
}

3. 读取文件,转格式,再下载样式

//读取文件,转格式,再下载
export const readBlobFileErrorMsg = (res: Record<string, any>) => {
  const { data, headers } = res
  const reader = new FileReader()
  reader.readAsText(data, 'utf-8')
  reader.onload = function () {
    try {
      const res = JSON.parse(reader.result as string)
      if (res.errorCode) {
        message.error(res.errorMsg)
      }
    } catch (error) {
      let filename: string = ''
      console.log('headers', headers, headers['content-disposition'])

      const temp = headers['content-disposition']
      if (!temp) return
      const filenameRegex = /filename=([^;]+)/i
      const matches = filenameRegex.exec(temp)
      if (matches != null && matches[1]) {
        filename = matches[1]
      }
      downloadBlobFile(data, filename)
    }
  }
}

上传文件

上传文件

1 .定义参数

 const [form] = Form.useForm();
 const [fileList, setFileList] = useState<UploadFile[]>([]);
 const [uploading, setUploading] = useState(false);

2 .定义操作函数

 //上传函数todo
  const handleUpload = async () => {
    const formData = new FormData();
    fileList.forEach((file) => {
      formData.append('file', file as RcFile);
    });
    setUploading(true);

    uploadFile(formData)
      .then((res) => {
        if (res.code === 200) {
          setFileList([]);
          message.success('上传成功');
          form.resetFields();
        } else {
          message.error(res?.message);
        }
      })
      .catch((error) => {
        console.error('上传失败');
      })
      .finally(() => {
        setUploading(false);
      });
  };
  
  //自定义上传
  const props: UploadProps = {
    multiple: false,
    maxCount: 1,
    accept: '.pdf',
    onRemove: (file) => {
      const index = fileList.indexOf(file);
      const newFileList = fileList.slice();
      newFileList.splice(index, 1);
      setFileList(newFileList);
    },
    beforeUpload: (file) => {
    //上传前,对文件进行筛选判断操作
      const fileLists = [...fileList, file];
      if (file?.type !== 'application/pdf') {
        message.error(`${file.name}'不是pdf文件!`);
        return false;
      }
      if (fileLists.length > 1) {
        message.error('只能上传一个文件');
        return false;
      }
      setFileList(fileLists);
      return true;
    },
    fileList,
  };

3. dom文章来源地址https://www.toymoban.com/news/detail-517915.html

      //dom函数
			 <div>
	              <Upload {...props}>
	                <Button icon={<UploadOutlined />}>选择文件</Button>
	              </Upload>
	
	              <Button
	                type="primary"
	                onClick={handleUpload}
	                disabled={fileList.length === 0}
	                loading={uploading}
	                style={{ marginLeft: 16 }}
	              >
	                {uploading ? '上传中' : '开始上传'}
	              </Button>
	          </div>

到了这里,关于下载文件 + 上传文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于hdfs突然无法上传下载文件的解决方法(Couldn‘t upload the file)

    在浏览器上可以正常访问HDFS集群http://node1:9870的Web UI页面,成功进入以下界面 同时可以查看hdfs的目录和文件 但无法上传和下载文件,出现以下报错:Couldn’t upload the file. 1、刚开始是可以对文件及文件夹进行增删改操作的,现在突然操作不了的,请检查下本地电脑的hosts文件

    2024年02月12日
    浏览(18)
  • Java spring-boot项目中如何上传下载文件或图片到spring-boot规定的非静态目录

    spring-boot的项目,虽然它自己定义了一个静态文件的存储目录,但是这个目录一般是作为前端静态文件的目录来作为使用的。如果使用这个静态目录来作为我们上传文件的目录会有一个比较尴尬的地方:将spring-boot打包成为jar包后,随着上传图片的增多,这个jar包也会跟着变大

    2024年02月16日
    浏览(19)
  • SpringBoot+vue文件上传&下载&预览&大文件分片上传&文件上传进度

    SpringBoot+vue 大文件分片下载 Blob File spark-md5根据文件内容生成hash 大文件分片上传(批量并发,手动上传)vue组件封装-form组件 vue上传大文件/视频前后端(java)代码 springboot+vue自定义上传图片及视频 SpringBoot + VUE实现前台上传文件获取实时进度( 使用commons-fileupload设置上传监听

    2024年02月05日
    浏览(31)
  • 下载文件 + 上传文件

    记录一下js实现下载文件的方式 下载文件 方式一:a 链接下载:模拟a链接的点击,把后端返回的下载地址设置给a链接的href属性 2. 文件流下载 前端接收 type: “application/octet-stream“ 格式的数据并下载,还有后端既返回octet-stream还返回JSON数据时的处理方法, 后端改了一下文件下

    2024年02月12日
    浏览(22)
  • Selenium基础 — 文件上传&文件下载

    说明: 文件上传是web页面上很常见的一个功能,用脚本去实现文件上传很简单。 一般场景:在页面中的上传按钮是一个input标签,其中type属性为 type=\\\"file\\\" ,这种可以用selenium提供的 send_keys() 方法轻松解决。 示例: 页面代码片段: 脚本代码:  提示: 另外一种非input标签的

    2024年02月02日
    浏览(12)
  • 前端常用的上传下载文件的几种方式,直接上传、下载文件,读取.xlsx文件数据,导出.xlsx数据

    1.1根据文件流Blob进行下载 1.2根据下载文件链接直接进行下载 html

    2024年02月12日
    浏览(17)
  • Flutter:文件上传与下载(下载后预览)

    dio是一个强大的Dart Http请求库,提供了丰富的功能和易于使用的API,支持文件上传和下载。 这个就不介绍了,网上有很多的封装案例。 简介 适用于iOS,Android,MacOS,Windows和Linux的后台文件下载器和上传器。 官方文档 https://pub-web.flutter-io.cn/packages/background_downloader 安装 注意:

    2024年02月13日
    浏览(15)
  • 【Postman】 测试文件上传、下载 一、使用PostMan测试文件上传接口

    1、、选择post请求方式,输入请求地址   二、填写Headers  一般是自动生成的 Key:Content-Type Value:multipart/form-data 如下图   三、填写body 选择form-data     然后选择文件file    点击添加文件,最后发送即可   1、反馈异常,先排查 Headers中 Conten-Type 与 ”文件类型“是否匹配  

    2024年02月11日
    浏览(42)
  • JAVA Http接口获取文件下载流,将下载的文件上传阿里云

     需要根据,业务数据,将存在第三方平台的数据,下载至本地,或转存阿里云OSS中。

    2024年02月16日
    浏览(11)
  • 文件上传及oss简单上传及下载

    文件上传就是通过io流复制到浏览器的过程 快速实现文件上传功能 1.后台实现文件上传功能  定义controllere 定义serevice 文件上传不会直接上传真是的目录,它一定要经过一个临时目录的中转以后,才会上传到真是目录。作用: 防止上传出现网络断开,或者用户上传直接刷新或

    2023年04月09日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包