首页 > 编程语言 >开发实例:后端Java和前端vue实现文件上传和下载功能

开发实例:后端Java和前端vue实现文件上传和下载功能

时间:2023-10-26 11:25:35浏览次数:41  
标签:文件 vue Java e5% axios file 上传 下载

首先,在Java的后端代码中,我们可以使用Spring框架来实现文件上传和下载功能。以下是一个简单的示例:

  • 文件上传

首先,我们需要在html页面上创建一个表单,其中包含一个file类型的输入字段:

<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">上传文件</button>
</form>

然后,在后端代码中,我们可以使用Spring框架的MultipartFile类来处理上传的文件,并将其保存到服务器上:

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
Path path = Paths.get("/path/to/upload/dir/" + file.getOriginalFilename());
Files.write(path, bytes);
return "上传成功:" + file.getOriginalFilename();
} catch (IOException e) {
e.printStackTrace();
return "上传失败:" + file.getOriginalFilename();
}
} else {
return "上传失败:请选择要上传的文件!";
}
}

在这个例子中,我们首先检查上传的文件是否为空,如果不为空,就读取文件的字节数据,并使用Files.write()方法将其写入指定的路径。

 

  • 文件下载

对于文件下载,我们可以使用Spring框架的ResponseEntity类来将文件内容作为响应体返回给前端。以下是一个示例代码:

@ResponseBody
public ResponseEntity<byte[]> downloadFile(@PathVariable String fileName) {
File file = new File("/path/to/download/dir/" + fileName);
if (file.exists()) {
try {
byte[] fileBytes = Files.readAllBytes(file.toPath());
HttpHeaders headers = new HttpHeaders();
headers.add("Content-Disposition", "attachment; filename=" + fileName);
ResponseEntity<byte[]> responseEntity = new ResponseEntity<>(fileBytes, headers, HttpStatus.OK);
return responseEntity;
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}

在这个例子中,我们首先检查指定的文件是否存在。如果存在,我们就使用Files.readAllBytes()方法读取文件内容生成byte数组,并将其设置为响应体的内容。同时,我们还需要设置响应头信息,告诉浏览器将该响应的内容作为下载文件。

在vue前端代码中,我们可以使用axios发送POST请求来上传文件,使用window.open()方法来实现文件下载。以下是一个示例代码:

  • 文件上传

<template>
<div>
<input type="file" @change="uploadFile">
</div>
</template>

<script>
import axios from 'axios'

export default {
methods: {
uploadFile(e) {
let formData = new FormData()
formData.append('file', e.target.files[0])
axios.post('/upload', formData)
.then(response => {
console.log(response.data)
})
.catch(error => {
console.log(error.response.data)
})
}
}
}
</script>

在这个例子中,我们只需要监听文件选择框的change事件,获取用户选择的文件,并使用FormData对象创建一个包含文件的表单数据。然后,我们使用axios.post()方法将表单数据发送给服务器。

  • 文件下载

<template>
<div>
<button @click="downloadFile">下载文件</button>
</div>
</template>

<script>
export default {
methods: {
downloadFile() {
let fileName = 'example.txt' // 要下载的文件名
window.open('/download/' + fileName)
}
}
}
</script>

在这个例子中,我们只需要在按钮的click事件中调用window.open()方法,并将要下载的文件名拼接到URL中即可。由于文件下载是浏览器自身的行为,因此我们无法通过JavaScript代码直接控制,只能将该操作委托给浏览器处理。

 

参考文章:http://blog.ncmem.com/wordpress/2023/10/26/%e5%bc%80%e5%8f%91%e5%ae%9e%e4%be%8b%ef%bc%9a%e5%90%8e%e7%ab%afjava%e5%92%8c%e5%89%8d%e7%ab%afvue%e5%ae%9e%e7%8e%b0%e6%96%87%e4%bb%b6%e4%b8%8a%e4%bc%a0%e5%92%8c%e4%b8%8b%e8%bd%bd%e5%8a%9f%e8%83%bd/

欢迎入群一起讨论

 

 

标签:文件,vue,Java,e5%,axios,file,上传,下载
From: https://www.cnblogs.com/songsu/p/17788976.html

相关文章

  • Java - InputStream流Http客户端文件上传
    场景:两个系统文件服务不同,需从另外一个系统中下载文件并上传到另外一个系统中。代码实现//远程服务下载文件Responseresponse=fileCenterService.downloadFile(fileId);InputStreaminputStream=response.body().asInputStream();//调用接口上传到文件服务HttpClienth......
  • 【Java 进阶篇】JavaScript 正则表达式(RegExp)详解
    JavaScript正则表达式,通常简写为RegExp,是一种强大的文本匹配工具,它允许你通过一种灵活的语法来查找和替换字符串中的文本。正则表达式在编程中用途广泛,不仅限于JavaScript,在许多编程语言中也都有类似的实现。什么是正则表达式正则表达式,简称正则或RegExp,是一个用于描述字符模式......
  • 【Java 进阶篇】JavaScript Math对象详解
    在JavaScript编程中,Math对象是一个非常有用的工具,用于执行各种数学运算。它提供了许多数学函数和常数,可以用于处理数字、执行几何运算、生成随机数等。在本篇博客中,我们将深入探讨JavaScript中Math对象的各种功能和用法。什么是Math对象?Math对象是JavaScript的内置对象之一,它不需要......
  • 【Java 进阶篇】JavaScript 中的全局对象和变量
    JavaScript是一门非常强大的编程语言,它提供了许多全局对象和变量,以便于在整个应用程序中共享数据和功能。本文将详细介绍JavaScript中的全局对象和变量,包括全局对象、全局变量、全局函数以及它们的用途和示例。全局对象JavaScript中有一些全局对象,它们在整个应用程序中都可用。......
  • vue3 vite 根据目录生成路由
    vite勾选vue-router搭建好项目后,routes部分示例代码为routes:[{path:'/',name:'home',component:HomeView},{path:'/about',name:'about',//routelevelcode-splitting......
  • 使用vite自动生成vue路由
    全新的路由组织方式以往编写路由都需要手动编写router.js代码,其实很多代码是重复的新的方案根据文件夹目录结构自动生成文件夹下的index.vue->/初始化项目构建npminitvue@latest运行npmrundev项目结构一个文件夹对应一个路由page.js用来填写配置信息exportdefault{ti......
  • 【java基础-实战2】数组拷贝的几种实现方式
    在实际的业务开发中,基本上很少很少很少…会遇到数组拷贝的场景,甚至是我们一般都不怎么用数组,List它不香嘛,为啥要用数组。那么现在这个问题有点冷门,要实现数组拷贝,怎么办呢?1、基础写法:循环赋值最简单直接的写法,那就是新建一个数组,一个一个拷贝进去String[]src=newString[]{"a......
  • Java基础 解压缩流、压缩流
     解压缩流就是读取压缩包中的文件,所以它是读,属于输入流压缩流就是把文件中的数据写到压缩包中,所以它是写,属于输出流 压缩包里面的每一个文件或文件夹在Java当中都是一个ZipEntry对象所以解压的本质其实就是把压缩包里面的每一个ZipEntry对象按照层级结构......
  • vue - 实现文件的上传-字节流下载详细过程
    前言这个需求一般是在有合同的地方用,首先不止一个地方用我们应该把他封装成一个简易的全局组件,上传的时候封装成全局组件,传2个值,一个合同id,一个开关,下载的时候调用接口获取文档流下载注意看下面的文件上传下载-细节有详细的过程和遇到的问题和解决方案效果图接口配置importreq......
  • vue和element ui 滑块组件 重置验证滑块父组件ref调用子组件函数,子组件调用自己dom标
    css3可以改变图片的颜色了。从此再也不用设计出多张图,而且随时可以修改。下面就简单介绍下css3中是如何做到改变背景图片的颜色效果的。方式一:利用css3滤镜filter中的drop-shadow代码如下:<style>.icon{display:inline-block;width:180px;height:180px;bac......