Angular14 利用Angular2实现文件上传的前端、利用springBoot实现文件上传的后台、跨域问题
一、angular2实现文件上传前端
Angular2使用ng2-file-upload上传文件,Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng2-uploader。ng2-uploader是一个轻便的上传文件的支持库,功能较弱,而ng2-file-upload是一个功能比较全面的上传文件的支持库。这里主要介绍一下ng2-file-upload的使用。
1 下载相关模块
进入到项目根目录执行 npm install ng2-file-upload --save
坑01:有时候利用npm下载不成功
2 在主模块中导入上传模块

技巧01:一般都是在共享模块中导入再导出,然后在需要的模块中导入共享模块就可以啦
3 编写上传文件组件
import { Component, OnInit } from '@angular/core';
import {FileUploader} from 'ng2-file-upload';
@Component({
selector: 'app-test-upload-file',
templateUrl: './test-upload-file.component.html',
styleUrls: ['./test-upload-file.component.css']
})
export class TestUploadFileComponent implements OnInit {
private uploader: FileUploader = new FileUploader({
url: '/devProject/uploadClient',
method: 'POST',
itemAlias: 'file'
});
constructor() { }
ngOnInit() {
}
/**
* 上传文件内容变化时执行的方法
* @param event
*/
selectedFileOnChanged(event: any) {
// 这里是文件选择完成后的操作处理
// alert('上传文件改变啦');
console.log(event.target.value);
console.log(event);
}
/**
* 上传文件方法
*/
uploadFile() {
alert('执行上传文件');
// 上传
this.uploader.queue[].onSuccess = function (response, status, headers) {
// 上传文件成功
if (status == ) {
// 上传文件后获取服务器返回的数据
const tempRes = response;
alert(response);
} else {
// 上传文件后获取服务器返回的数据错误
alert('上传失败');
}
};
// onSuccessItem(item: FileItem, response: string, status: number, headers: ParsedResponseHeaders): any;
this.uploader.queue[].upload(); // 开始上传
// this.uploader.queue[0].onSuccess()
alert('上传之后');
}
}
4 HTML文件
<p>
test-upload-file works!
</p>
<hr style="border: 1px solid blue;" /> <input type="file" ng2FileSelect [uploader]="uploader" (change)="selectedFileOnChanged($event)" />
<button (click)="uploadFile()">点击上传</button>
详情请参见:点击前往
二、SpringBoot实现后台功能
/**
* 上传客户EXCEL表格
* @param file
* @return 上传成功信息
* @throws IOException
*/
@PostMapping("/uploadClient")
public String testUpload(@RequestParam("file") MultipartFile file) throws IOException {
// System.out.println("后台文件上传函数");
// System.out.println("获取到的文件名称为:" + file);
String filePath = file.getOriginalFilename(); // 获取文件的名称
filePath = "asset/" + filePath; // 这是文件的保存路径,如果不设置就会保存到项目的根目录 BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(filePath)); outputStream.write(file.getBytes());
outputStream.flush();
outputStream.close();
return "客户资料上传成功";
}
坑01:文件上传时会出现跨域问题,最简单的方法就是在后台配置一个跨域配置,就是编写一个类,然后在需要跨域的类中继承这个类就可以啦
参考博文:点击前往
package cn.xiangxu.cq8x.configure; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; /**
* @author 王杨帅
* @create 2018-03-22 15:51
* @desc 跨域配置
**/
@Configuration
public class CorsConfigure extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
.allowCredentials(true).maxAge(3600);
}
}
package cn.xiangxu.cq8x.controller; import cn.xiangxu.cq8x.configure.CorsConfigure;
import cn.xiangxu.cq8x.dao.ClientDao;
import cn.xiangxu.cq8x.model.dataModel.ClientInfoModel;
import cn.xiangxu.cq8x.model.viewModel.ResultViewModel;
import cn.xiangxu.cq8x.service.ClientService;
import cn.xiangxu.cq8x.util.ResultViewUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException; /**
* @author 王杨帅
* @create 2018-03-06 20:36
* @desc 客户信息控制层接口
**/
@RestController
@RequestMapping(value = "/client")
@CrossOrigin
public class ClientController extends CorsConfigure { @Resource(name = "clientService")
private ClientService clientService; /**
* 查询所有的客户信息
* @return
*/
@GetMapping(value = "/findAll")
public ResultViewModel findAll(
@RequestParam(value = "page", required = false, defaultValue = "0") Integer page,
@RequestParam(value = "size", required = false, defaultValue = "3") Integer size
) {
Pageable pageable = PageRequest.of(page, size);
System.out.println(pageable);
return ResultViewUtil.success(clientService.findAll(pageable));
} /**
* 根据姓名查询客户信息
* @param name 从路径中获取参数
* @return
*/
@GetMapping(value = "/findByName02/{name}")
public ResultViewModel findByName02(
@PathVariable("name") String name
) {
System.out.println("前端传过来的目标客户姓名为:" + name);
return ResultViewUtil.success(clientService.findByName(name));
} /**
* 根据姓名查询客户信息
* @param name 从query中获取参数
* @return
*/
@GetMapping(value = "/findByName")
public ResultViewModel findByName(
@RequestParam("name") String name
) {
System.out.println("从前端获取到的参数为:" + name);
return ResultViewUtil.success(clientService.findByName(name));
} /**
* 根据姓名进行模糊查询
* @param name
* @return
*/
@GetMapping(value = "/findByNameLike/{name}")
public ResultViewModel findByNameLike(
@PathVariable("name") String name
) {
System.out.println("前端传过来的模糊查询信息为 :" + name);
return ResultViewUtil.success(clientService.findByNameLike(name));
} /**
* 根据idcard查询客户信息
* @param idcard 从路径中获取参数
* @return
*/
@GetMapping(value = "/findByIdcard02/{idcard}")
public ResultViewModel findByIdcard02(
@PathVariable("idcard") String idcard
) {
System.out.println("前端传过来的客户证件号码为:" + idcard);
return ResultViewUtil.success(clientService.findByIdcard(idcard));
} /**
* 根据idcard查询客户信息
* @param idcard 从query中获取参数
* @return
*/
@GetMapping(value = "/findByIdcard")
public ResultViewModel findByIdcard(
@RequestParam("idcard") String idcard
) {
System.out.println("从前端获取到的参数为:" + idcard);
return ResultViewUtil.success(this.clientService.findByIdcard(idcard));
} /**
* 新增客户
* @param clientInfoModel
* @return
*/
@PostMapping(value = "/create")
public ResultViewModel create(
@RequestBody ClientInfoModel clientInfoModel
) {
return ResultViewUtil.success(this.clientService.createNewClient(clientInfoModel));
} @PutMapping(value = "/update")
public ResultViewModel update(
@RequestBody ClientInfoModel clientInfoModel
) {
System.out.println(clientInfoModel);
return ResultViewUtil.success(this.clientService.updateClient(clientInfoModel));
} @CrossOrigin
@PostMapping(value = "/upload")
public String upload(@RequestParam("file") MultipartFile file) throws IOException {
// System.out.println("后台文件上传函数");
System.out.println("获取到的文件名称为:" + file);
String filePath = file.getOriginalFilename(); // 获取文件的名称
filePath = "G:/" + filePath; // 这是文件的保存路径,如果不设置就会保存到项目的根目录 BufferedOutputStream outputStream = new BufferedOutputStream(new FileOutputStream(filePath)); outputStream.write(file.getBytes());
outputStream.flush();
outputStream.close(); return "客户资料上传成功";
} @GetMapping(value = "/test")
public ResultViewModel test(
@RequestParam("id") Integer id
) {
return ResultViewUtil.success("这是一个测试接口");
} @PutMapping(value = "/test02")
public ResultViewModel test02(
@RequestParam(value = "page", required = false, defaultValue = "0") Integer page,
@RequestParam(value = "size", required = false, defaultValue = "3") Integer size
) {
System.out.println("获取到的参数page为:" + page);
System.out.println("获取到的参数size为:" + size);
return ResultViewUtil.success("PUT方法的参数问题");
} }
·下面是我的公众号二维码,欢迎关注·
尋渝記

微信号:xyj_fury
Angular14 利用Angular2实现文件上传的前端、利用springBoot实现文件上传的后台、跨域问题的更多相关文章
- Angular2发送HTTP请求SpringBoot后台跨域问题解决
Angular通过http发送post请求至SpringBoot的Controller,由于同源策略的保护,遇到跨域问题: • 源(origin)就是协议(http).域名(localhost)和端口 ...
- 利用 jrebel 热部署\远程调试\远程热部署 springboot项目 服务器上的代码
首先要在eclipse 中启用 启用以后在 resource 中生成了 rebel-remote.xml 然后build,把生成的jar包放到服务器上. 然后用下面的命令启动 java -agentp ...
- Asp.Net Core 3.0 学习3、Web Api 文件上传 Ajax请求以及跨域问题
1.创建Api项目 我用的是VS2019 Core3.1 .打开Vs2019 创建Asp.Net Core Web应用程序命名CoreWebApi 创建选择API 在Controller文件夹下面添加 ...
- 七牛---以一个七牛上传的实例小结下AJAX跨域【转】
http://blog.csdn.net/netdxy/article/details/50699842 使用七牛过程中,很多用户或多或少遇到跨域的问题,这篇文章主要介绍下跨域的概念来看什么情况下会出 ...
- NetCore 上传,断点续传,可支持流上传
之前公司要做一个断点续传的业务,找了许多都没有找到合适的,都是残次不全的,终于让我遇到一个基于百度的 webuploader 的断点续传.原作者: 断点续传(上传)( https://www.some ...
- 利用Nginx轻松实现Ajax的跨域请求(前后端分离开发调试必备神技)
利用Nginx轻松实现浏览器中Ajax的跨域请求(前后端分离开发调试必备神技) 前言 为什么会出现跨域? 造成跨域问题的原因是因为浏览器受到同源策略的限制,也就是说js只能访问和操作自己域下的资源,不 ...
- gulp 搭建个人工作流:文件注入、热启动、跨域
个人比价推崇前后端分离的开发方式,大家伙各司其职,只需通过 API 进行交流,不仅避免了沟通上的成本,更提升了开发效率.而在前端开发工作中,许多需求和问题是相似的,所以我们的开发模式往往是雷同的,是否 ...
- 跨域策略文件crossdomain.xml文件
使用crossdomain.xml让Flash可以跨域传输数据 一.crossdomain.xml文件的作用 跨域,顾名思义就是需要的资源不在自己的域服务器上,需要访问其他域服务器.跨域策略文件 ...
- 谷歌通过ajax获取本地JSON文件,为什么会显示跨域?转载的
在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 谷 ...
- 谷歌通过ajax获取本地JSON文件,为什么会提示跨域?
在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 下 ...
随机推荐
- Kattis - triangle 【数学】
题意 求第N个迭代三角形 中 所有黑色三角形的周长的整数部分的位数 思路 该三角形的周长是 3^(n + 1)/ 2 ^ (n) 然后 可以用 long double 存下来 再求位数 就可以 AC ...
- pandas to_datetime()
>>> import pandas as pd >>> i = pd.date_range() >>> df = pd.DataFrame(dic ...
- spring boot项目使用swagger-codegen生成服务间调用的jar包
swagger-codegen的github:https://github.com/swagger-api/swagger-codegen 需要的环境:jdk > 1.7 maven > ...
- Python问题解决记录
Python如何进行中文注释:网址 解决Python UnicodeEncodeError: 'ascii' codec can't encode: 网址1.网址2.网址3 Python 字符串转换为 ...
- uboot 2013.01 代码简析(3)第二阶段初始化
u-boot第二阶段初始化内容的入口函数是_main,_main位于arch/arm/lib/crt0.S文件中: _main函数中先为调用board_init_f准备初始化环境(设置栈指针sp和并给 ...
- POJ2253 frogger 最短路 floyd
#include<iostream>#include<algorithm>#include<stdio.h>#include<string.h>#inc ...
- ANT+JMETER集成
一.ant安装 环境准备: 1.安装jdk http://www.oracle.com/technetwork/java/javase/downloads/index.html 注意:最好与jmete ...
- adb命令(一)
针对移动端 Android 的测试, adb 命令是很重要的一个点,必须将常用的 adb 命令熟记于心, 将会为 Android 测试带来很大的方便,其中很多命令将会用于自动化测试的脚本当中. And ...
- 关于com组件中idl文件的理解
IDL文件: IDL文件主要定义两大类内容:一是定义接口:二是定义类型库. 定义接口的关键字是interface.每个接口定义前面方括号里面的内容是该接口的属性,最重要的是uuid的定义.该部分经过M ...
- C++ vector容器删除操作
1.vector::pop_back() 删除vector的最后一个元素,vector的大小减一,删了的元素被销毁. 2.vector::erase() iterator erase (iterato ...