springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式

作者:相与还 时间:2023-08-16 10:26:45 

前言

在服务器上,当我们启动了tomcat,就可以以

http://ip地址:8080/文件路径/文件名

的方式,进行访问到我们服务器上处于tomcat的webapps文件夹下的文件

如图:

springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式

上面我是用的http://47.92.53.108:8080/IMG/img04.jpg进行访问文件

于是为了可以往上面加文件,我们有两种方式,一种就是直接复制文件到路径上,

另一种自然是通过代码的方式,调用接口往上面上传文件

准备工作

首先你得安装tomcat

springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式

安装完成后后启动

然后,需要注意的是,为了让我们能够访问文件,那么我们需要做这么一件事,开放服务器的安全策略
把端口8080放开

springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式

为了能够成功上传文件,需要放开tomcat的写权限,
即解决报错returned a response status of 405 Method Not Allowed

在tomcat的conf文件夹,找到web.xml文件,添加如下代码

<!-- 使得服务器允许文件写入。-->
<init-param>
           <param-name>readonly</param-name>
           <param-value>false</param-value>
       </init-param>

注意,该代码需要在servlet标签内部添加,即:

<servlet>
       <servlet-name>default</servlet-name>
       <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
       <init-param>
           <param-name>debug</param-name>
           <param-value>0</param-value>
       </init-param>
       <init-param>
           <param-name>listings</param-name>
           <param-value>false</param-value>
       </init-param>
       <!-- 使得服务器允许文件写入。-->
<init-param>
           <param-name>readonly</param-name>
           <param-value>false</param-value>
       </init-param>
       <load-on-startup>1</load-on-startup>
   </servlet>

加完代码记得重启tomcat

上传文件代码

在pom.xml文件加入代码:

<!--        跨域上传依赖-->
       <dependency>
           <groupId>com.sun.jersey</groupId>
           <artifactId>jersey-core</artifactId>
           <version>1.18.1</version>
       </dependency>
       <dependency>
           <groupId>com.sun.jersey</groupId>
           <artifactId>jersey-client</artifactId>
           <version>1.18.1</version>
       </dependency>
@PostMapping("/upLoadImg")
   @ResponseBody
   public String upLoadImg(MultipartFile myfile){

String path = "http://服务器公网ip:8080/tomcat的webapps下的文件夹名称/";

//为上传到服务器的文件取名,使用UUID防止文件名重复
       String type= myfile.getOriginalFilename().substring(myfile.getOriginalFilename().lastIndexOf("."));
       String filename= UUID.randomUUID().toString()+type;
       try{
//使用Jersey客户端上传文件
           Client client = Client.create();
           WebResource webResource = client.resource(path +"/" + URLEncoder.encode(filename,"utf-8"));
           webResource.put(myfile.getBytes());
           System.out.println("上传成功");
           System.out.println("图片路径==》"+path+filename);
       }catch(Exception ex){
           System.out.println("上传失败");
       }
       return "上传成功";
   }

以上会随机生成uuid作为文件名
如果想保留原本文件名称,参考如下代码
有一个需要注意的是:如果以原文件名命名进行上传,文件名不能包含中文
否则会报错400

@PostMapping("/upLoadImg")
   @ResponseBody
   public String doRemoteUpload(@RequestParam("file")MultipartFile file){
       String path = "http://服务器公网ip:8080/tomcat的webapps下的文件夹名称/";
       String filename= file.getOriginalFilename();
       try{
           Client client = Client.create();
           WebResource webResource = client.resource(path +"/" + filename);
           webResource.put(file.getBytes());
       }catch(Exception ex){
           return "上传文件失败:"+path+"/"+filename;
       }
       return "上传文件成功:"+path+"/"+filename;
   }

导入的import为:

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;

删除服务器文件

@GetMapping("/deleteUploadImg")
   @ResponseBody
   public ResultVO deleteUploadImg(){

String path = "http://服务器公网ip:8080/tomcat的webapps下的文件夹名称/文件名";
       try{
           Client client = Client.create();
           WebResource webResource = client.resource(path);
           webResource.delete();
       }catch(Exception ex){
           return "删除文件失败:"+path+"/"+filename+ ex.getMessage();
       }
       return "删除文件成功:"+path+"/"+filename;
   }

如果需要 删除文件

只需要把文件的路径传入
并且使用WebResourcedelete方法即可

来源:https://blog.csdn.net/xc9711/article/details/129215577

标签:springboot,jersey,tomcat,跨域,上传,服务器
0
投稿

猜你喜欢

  • Springboot集成JUnit5优雅进行单元测试的示例

    2021-09-24 07:49:58
  • Android 实现手机接通电话后振动提示的功能

    2022-01-10 23:56:58
  • SpringCloud版本问题报错及解决方法

    2023-01-29 23:19:46
  • Android自定义开关按钮源码解析

    2021-12-27 06:45:27
  • Java数组高级算法与Arrays类常见操作小结【排序、查找】

    2022-12-02 15:17:14
  • .NET企业级项目中遇到的国际化问题和解决方法

    2022-12-03 08:18:06
  • java实现短信验证码5分钟有效时间

    2023-08-30 18:42:26
  • C#实现百度ping推送功能的方法

    2023-03-01 18:15:56
  • Android重力传感器实现滚动的弹球

    2023-05-04 05:49:28
  • 详解手把手Maven搭建SpringMVC+Spring+MyBatis框架(超级详细版)

    2023-06-22 06:17:48
  • java实现仿windows 字体设置选项卡实例

    2023-01-02 11:45:42
  • 了解Java线程池执行原理

    2022-10-12 13:00:23
  • 如何在Spring Boot应用中优雅的使用Date和LocalDateTime的教程详解

    2023-03-14 04:54:11
  • 工作中禁止使用Executors快捷创建线程池原理详解

    2021-11-24 20:55:48
  • C#实现XML文件与DataTable、Dataset互转

    2021-06-07 04:00:27
  • Java打印出所有的水仙花数的实现代码

    2023-03-06 17:24:22
  • 浅析java中Integer传参方式的问题

    2023-10-27 03:35:43
  • 一起学JAVA基础之运算符

    2023-11-06 23:19:01
  • Springboot实现高吞吐量异步处理详解(适用于高并发场景)

    2023-08-20 23:40:35
  • C#使用NPOI设置Excel下拉选项

    2022-11-28 07:05:39
  • asp之家 软件编程 m.aspxhome.com