当前位置:   article > 正文

SpringBoot+vue实现跨域文件上传,并在linux上搭建tomcat文件服务器_前端跨域专线上传文件

前端跨域专线上传文件

一.前端

前端我使用的是vue发送ajax请求实现文件上传,其它前端框架调用方式也是与此类似

  1. <!-- 用户列表 -->
  2. <template>
  3. <div id="user">
  4. <!-- 导航开始 -->
  5. <el-row>
  6. <el-col :span="24">
  7. <el-breadcrumb separator-class="el-icon-arrow-right">
  8. <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
  9. <el-breadcrumb-item>用户信息</el-breadcrumb-item>
  10. </el-breadcrumb>
  11. </el-col>
  12. </el-row><br>
  13. <!-- 导航结束 -->
  14. <!--修改开始-->
  15. <el-dialog title="用户信息" :visible.sync="dialogFormVisible">
  16. <el-form :model="user">
  17. <el-form-item label="头像:" :label-width="formLabelWidth"
  18. style="display:inline-block;width:310px">
  19. <el-upload class="upload-demo" ref="upload"
  20. :limit="1" action="上传文件要调用的接口路径"
  21. :on-change="uploadChange" accept=".jpg" :auto-upload="false">
  22. <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
  23. <div slot="tip" class="el-upload__tip">只支持上传.jpg文件</div>
  24. </el-upload>
  25. </el-form-item>
  26. </el-form>
  27. <div slot="footer" class="dialog-footer">
  28. <el-button @click="dialogFormVisible = false">取 消</el-button>
  29. <el-button type="primary" @click="btnUpdate()">确 定</el-button>
  30. </div>
  31. </el-dialog>
  32. <!--修改结束-->
  33. <!-- 数据列表开始 -->
  34. <!-- 数据列表结束 -->
  35. </div>
  36. </template>
  37. export default {
  38. name: "",
  39. data() {
  40. return {
  41. dialogFormVisible: false, //对话框表单是否显示
  42. formLabelWidth: '100px', //对话框宽度
  43. user: {},
  44. file: null, //上传的文件
  45. };
  46. },
  47. methods: {
  48. //当文件上传组件发生改变,将文件赋值给file
  49. uploadChange(file) {
  50. this.file = file
  51. },
  52. //文件保存
  53. btnUpdate: function () {
  54. //创建formData对象
  55. let formData = new FormData();
  56. if (this.file != null) {
  57. formData.append("myfile", this.file.raw); //添加要上传的文件相关的信息
  58. }
  59. formData.append("username", this.user.username); //请求行中用户id
  60. //请求头
  61. const params = {
  62. headers: { "Content-Type": "multipart/form-data;boundary=" + new Date().getTime() }
  63. };
  64. axios.post("/api/user/upLoadImg", formData, params).then(res => {
  65. if (res.data.status == 200) {
  66. // 隐藏自己
  67. this.dialogFormVisible = false;
  68. // 调用查询数据
  69. } else {
  70. this.$message({
  71. showClose: true,
  72. message: res.data.msg,
  73. type: 'warning'
  74. });
  75. }
  76. })
  77. .catch((err) => {
  78. this.$message({
  79. showClose: true,
  80. message: err,
  81. type: 'error'
  82. });
  83. })
  84. }
  85. },
  86. created() {
  87. //获取用户id
  88. this.user.username = window.localStorage.getItem('username');
  89. },
  90. };
  91. </script>

二.springboot后端 

引入maven 依赖

  1. <!--跨域上传文件-->
  2. <dependency>
  3. <groupId>com.sun.jersey</groupId>
  4. <artifactId>jersey-core</artifactId>
  5. <version>1.18.1</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>com.sun.jersey</groupId>
  9. <artifactId>jersey-client</artifactId>
  10. <version>1.18.1</version>
  11. </dependency>

通过jersey客户端连接,实现文件跨域上传。springboot后台文件上传接口,形参中文件名需与前端传入的文件名一致,否则会出现异常

  1. @PostMapping("/upLoadImg")
  2. @ResponseBody
  3. public ResponseResult<Object> doUpload(@RequestBody MultipartFile myfile, User user){
  4. String filename=null; //文件名
  5. if(!StringUtils.isEmpty(myfile)){
  6. //tomcat文件服务器地址
  7. String path="http://192.172.0.17:8090//uploadfiles/";
  8. //为上传到服务器的文件取名,使用UUID防止文件名重复
  9. String type=myfile.getOriginalFilename().substring(myfile.getOriginalFilename().lastIndexOf("."));
  10. filename= UUID.randomUUID().toString()+type;
  11. try{
  12. //使用Jersey客户端上传文件
  13. Client client=Client.create();
  14. WebResource webResource=client.resource(path+"/"+ URLEncoder.encode(filename,"utf-8"));
  15. webResource.put(myfile.getBytes());
  16. }catch(Exception ex){
  17. System.out.println("上传失败");
  18. }
  19. }
  20. user.setAvatarUrl(filename);//修改头像,将文件全地址存入数据库
  21. ResponseResult<Object> responseResult = null;
  22. if(userService.saveOrUpdate(user)){
  23. responseResult = new ResponseResult<>("修改用户信息成功", "OK", 200);
  24. }
  25. return responseResult;
  26. }

        代码中ResponseResult工具类请参考文章:

通过redis实现SpringBoot接口幂等性的自定义注解

        tomcat安装方式请参询我另一篇文章笔记:

Linux下配置MySQL数据库和Tomcat 应用服务器

       在tomcat安装目录中的webapps目录里面创建图片上传文件夹uploadfiles,创建命令

find / -name webapps |  mkdir uploadfiles

      注意:1.如果有多个tomcat需要在同一个运行环境启动,需要注意改变tomcat端口

                 2.上传文件时需注意文件上传url是否和tomcat文件地址是否一致

            

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/618962
推荐阅读
相关标签
  

闽ICP备14008679号