springboot+jersey+tomcat实现跨域方式上传文件到服务器的方式
作者:相与还 发布时间:2023-08-16 10:26:45
标签:springboot,jersey,tomcat,跨域,上传,服务器
前言
在服务器上,当我们启动了tomcat,就可以以
http://ip地址:8080/文件路径/文件名
的方式,进行访问到我们服务器上处于tomcat的webapps文件夹下的文件
如图:
上面我是用的
http://47.92.53.108:8080/IMG/img04.jpg
进行访问文件
于是为了可以往上面加文件,我们有两种方式,一种就是直接复制文件到路径上,
另一种自然是通过代码的方式,调用接口往上面上传文件
准备工作
首先你得安装tomcat
安装完成后后启动
然后,需要注意的是,为了让我们能够访问文件,那么我们需要做这么一件事,开放服务器的安全策略
把端口8080放开
为了能够成功上传文件,需要放开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;
}
如果需要 删除文件
只需要把文件的路径传入
并且使用WebResource
的delete
方法即可
来源:https://blog.csdn.net/xc9711/article/details/129215577


猜你喜欢
- 简介我们知道Java中Collection接口下的很多集合都是线程不安全的, 比如 java.util.ArrayList不是线程安全的,
- 概述AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程,作为面向对象的一种补充,用于处理系统中分
- 本文实例讲述了Android AutoCompleteTextView连接数据库自动提示的方法。分享给大家供大家参考,具体如下:这个简单例子
- 公司的一个手机端的 CRM 项目最近要增加小票打印的功能,就是我们点外卖的时候经常会见到的那种小票。这里主要涉及到两大块的知识:蓝牙连接及数
- 实现多表联合查询还是在david.mybatis.model包下面新建一个Website类,用来持久化数据之用,重写下相应toString(
- /** * @param h *
- 使用官方的刷新控件SwipeRefreshLayout来实现下拉刷新,当RecyclerView滑到底部实现下拉加载(进度条效果用Recyc
- Java中的我们可以利用split把字符串按照指定的分割符进行分割,然后返回字符串数组split 方法该方法的作用是:将一个字符串分割为子字
- Android多媒体 MediaPlayer我们可以通过这个API来播放音频和视频该类是Androd多媒体框架中的一个重要组件,通过该类,我
- 摘要:Java8通过Function获取字段名,解决硬编码,效果类似于mybatis-plus的LambdaQueryWrapper。本文总
- Android的文件存储,有I/O流的方式存储,与java一样,还有一种Android自己的SharePreferences存储方法。下面看
- 修改FeginCilent定义的服务名到指定服务通过覆盖类来修改对应的服务名,这里将所有的FeginClient对应的服务名都修改好。pac
- AntPathMatcher前言(1)SpringMVC的路径匹配规则是依照Ant的来的,实际上不只是SpringMVC,整个Spring框
- spring data jpa使用自定义repository实现类spring data jpa中使用JpaRepository等接口定义r
- 本文实例为大家分享了java WebSocket实现聊天消息推送功能的具体代码,供大家参考,具体内容如下环境:JDK.1.7.0_51apa
- Android Support Annotations &
- BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。在计算机中,BLOB常常是数据库中用来存
- 前言:在 Java 中,常用的锁有两种:synchronized(内置锁)和 ReentrantLock(可重入锁),二者的功效都是相同得,
- Java获取文件的类型和扩展名实现代码:File file=new File("E:\\aa.jpg"); String
- 前言对象关系映射(ORM)已经被使用了很长时间,以解决在编程过程中对象模型与数据模型在关系数据库中不匹配的问题。Dapper是由Stack