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读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 下 ...
随机推荐
- HDU - 1176 免费馅饼 【DP】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1176 思路 因为刚开始的起点是固定的 但是终点不是固定的 所以我们可以从终点往起点推 dp[i][j] ...
- 通过elasticsearch对日志进行搜索热词统计
通过logstash搜集日志 这里搜集日志可以使用ELK的一个插件filebeat对日志进行处理,并传输到后端的程序 在这里有一个不好的地方, 如果想要直接使用filebeat将日志发送到elasti ...
- orcal操作锦集
更新时间:update qs_settle_dt_cfg set end_date=to_date('9999-12-31','yyyy-MM-dd');查询时间:select to_char( e ...
- node.js+express+jade系列五:ajax登录
本文通过jquery实现简单的无刷新登录 1:首先要在router中配置登录请求,因为登录需要传user和pwd考虑到安全需用post请求 { path:'/', meth ...
- hdu 2044 一只小蜜蜂...(简单dp)
一只小蜜蜂... Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- Hibernate学习---第八节:继承关系的映射配置
1.单表继承 (1).实体类,代码如下: package learn.hibernate.bean; import java.util.Date; /** * 持久化类设计 * 注意: * 持久化类通 ...
- kaggle 欺诈信用卡预测——不平衡训练样本的处理方法 综合结论就是:随机森林+过采样(直接复制或者smote后,黑白比例1:3 or 1:1)效果比较好!记得在smote前一定要先做标准化!!!其实随机森林对特征是否标准化无感,但是svm和LR就非常非常关键了
先看数据: 特征如下: Time Number of seconds elapsed between each transaction (over two days) numeric V1 No de ...
- GitHub基本使用
什么是GitHub? GitHub是用于版本控制和协作的代码托管平台.它可以让您和其他人在任何地方一起工作 本教程教你如GitHub必需资源,如仓库,分支,提交和拉请求.您将创建自己的Hello Wo ...
- Java_注解_00_资源贴
1.Java注解教程:自定义注解示例,利用反射进行解析 2. (1)深入理解Java:注解(Annotation)基本概念 (2)深入理解Java:注解(Annotation)自定义注解入门 (3)深 ...
- git branch detached from jb4.2.2_1.0.0-ga
/*************************************************************************** * git branch detached f ...