一、angular2实现文件上传前端

  Angular2使用ng2-file-upload上传文件,Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng2-uploaderng2-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实现文件上传的后台、跨域问题的更多相关文章

  1. Angular2发送HTTP请求SpringBoot后台跨域问题解决

    Angular通过http发送post请求至SpringBoot的Controller,由于同源策略的保护,遇到跨域问题: • 源(origin)就是协议(http).域名(localhost)和端口 ...

  2. 利用 jrebel 热部署\远程调试\远程热部署 springboot项目 服务器上的代码

    首先要在eclipse 中启用 启用以后在 resource 中生成了 rebel-remote.xml 然后build,把生成的jar包放到服务器上. 然后用下面的命令启动 java -agentp ...

  3. Asp.Net Core 3.0 学习3、Web Api 文件上传 Ajax请求以及跨域问题

    1.创建Api项目 我用的是VS2019 Core3.1 .打开Vs2019 创建Asp.Net Core Web应用程序命名CoreWebApi 创建选择API 在Controller文件夹下面添加 ...

  4. 七牛---以一个七牛上传的实例小结下AJAX跨域【转】

    http://blog.csdn.net/netdxy/article/details/50699842 使用七牛过程中,很多用户或多或少遇到跨域的问题,这篇文章主要介绍下跨域的概念来看什么情况下会出 ...

  5. NetCore 上传,断点续传,可支持流上传

    之前公司要做一个断点续传的业务,找了许多都没有找到合适的,都是残次不全的,终于让我遇到一个基于百度的 webuploader 的断点续传.原作者: 断点续传(上传)( https://www.some ...

  6. 利用Nginx轻松实现Ajax的跨域请求(前后端分离开发调试必备神技)

    利用Nginx轻松实现浏览器中Ajax的跨域请求(前后端分离开发调试必备神技) 前言 为什么会出现跨域? 造成跨域问题的原因是因为浏览器受到同源策略的限制,也就是说js只能访问和操作自己域下的资源,不 ...

  7. gulp 搭建个人工作流:文件注入、热启动、跨域

    个人比价推崇前后端分离的开发方式,大家伙各司其职,只需通过 API 进行交流,不仅避免了沟通上的成本,更提升了开发效率.而在前端开发工作中,许多需求和问题是相似的,所以我们的开发模式往往是雷同的,是否 ...

  8. 跨域策略文件crossdomain.xml文件

    使用crossdomain.xml让Flash可以跨域传输数据 一.crossdomain.xml文件的作用    跨域,顾名思义就是需要的资源不在自己的域服务器上,需要访问其他域服务器.跨域策略文件 ...

  9. 谷歌通过ajax获取本地JSON文件,为什么会显示跨域?转载的

    在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 谷 ...

  10. 谷歌通过ajax获取本地JSON文件,为什么会提示跨域?

    在本地写了一段JSON代码,然后用ajax读取后,在浏览器打开,发现谷歌提示涉及到跨域问题, 但是跨域是由于协议,域名,端口中有一个不同,才会跨域,我在本地访问自己的文件,怎么和跨域扯上关系了?? 下 ...

随机推荐

  1. 保持linux下保持ssh不断线

    用ssh链接服务端,一段时间不操作或屏幕没输出(比如复制文件)的时候,会自动断开,有两种解决办法: 1.在客户端配置 #vi  /etc/ssh/ssh_config(注意不是/etc/ssh/ssh ...

  2. hadoop自带例子SecondarySort源码分析MapReduce原理

    这里分析MapReduce原理并没用WordCount,目前没用过hadoop也没接触过大数据,感觉,只是感觉,在项目中,如果真的用到了MapReduce那待排序的肯定会更加实用. 先贴上源码 pac ...

  3. [原创]Scala学习:流程控制,异常处理

    1.流程控制 1)do..while def doWhile(){ var line="" do{ line = readLine() println("readline ...

  4. 手机端适配rem代码片段

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 中国剩余定理的应用:猪的安家 ->福州大学 OJ

                                                                     Problem 1402 猪的安家 Accept: 984    Su ...

  6. 51nod 1525 && CF566D

    题意:给定n个元素,现在有2种合并操作和1种询问操作 1.单独合并两个元素所在的集合 2.合并一个区间内的元素所在的集合 询问:两个元素是否属于统一集合 神犇题解 感觉又涨了新姿势啊..我们最恼火的是 ...

  7. spring boot项目启动报(No session repository could be auto-configured, check your configuration (session store type is 'null'))

    找到项目的application配置文件,增加 spring.session.store-type=none,重新启动问题解决 注:因为项目未使用redis管理session,可以如上设置,如果想使用 ...

  8. MySQL- SQL UNION 和 UNION ALL 操作符

    在数据库查询中我们常常遇到这样一种情况,想把两个子查询的结果合并在一起变成一条 sql 去执行而不是多个sql分次执行.只是后我们就可以使用 UNION 和 UNION ALL 操作符来操作了. SQ ...

  9. Hadoop- DistCp(分布式拷贝)

    在实际的生产环境中,我们的企业都有测试集群和生产集群,有的比较大型的企业有多个版本的Hadoop 大数据集群,这时候有个这样的需求,各个集群上的资源需要进行迁移,比如说一些生产集群需要一些测试集群的数 ...

  10. mysql的SQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高

    mysql的SQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高 在很多分页的程序中都这样写: SELECT COUNT(*) from `table` WHERE ... ...