SpringBoot使用Jersey实现文件上传到文件服务器

本文是文件上传到服务器,包括本地使用tomcat开的文件服务器或者远程的文件服务器

本地使用tomcat开文件服务器请参考另一篇文章:使用tomcat搭建简易文件服务器-CSDN博客

①导入依赖

<!-- web层-->

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

</dependency>

<!--jersey上传文件用-->

<dependency>

    <groupId>com.sun.jersey</groupId>

    <artifactId>jersey-client</artifactId>

    <version>1.18.1</version>

</dependency>

web是必须要有的,因为会用到MultipartFile。

②编写JesyFileUpload的文件上传工具类:

import java.io.IOException;

import java.net.URLEncoder;

import java.util.*;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.multipart.MultipartFile;

import org.springframework.web.multipart.MultipartHttpServletRequest;

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

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

/**

* 跨服务器文件上传工具类

* @author

*/

public class JesyFileUploadUtil {

/**

    * 上传文件

    *

    * @param request --从request对象中获取上传的文件

    * @param fileName --文件名

    * @param servlerUrl --服务器路径http://127.0.0.1:8080/ssm_image_server

    * @return

    * @throws IOException

    */

    public static Map uploadFile(MultipartFile file,String serverUrl)throws IOException {

System.out.println("文件名:"+file.getOriginalFilename());

//为上传到服务器的文件取名,使用UUID防止文件名重复

        String filename=UUID.randomUUID().toString()+"-"+file.getOriginalFilename();

//创建jesy服务器,进行跨服务器上传

        Client client =Client.create();

//把文件关联到远程服务器

        //http://127.0.0.1:8080/ssm_image_server/upload/123131312321.jpg

        WebResource webResource =client.resource(serverUrl +"/" +URLEncoder.encode(filename,"utf-8"));

//上传

        webResource.put(file.getBytes());

Mapmap=new HashMap<>();

//图片上传成功后要做的事儿

        //1、ajax回调函数做图片回显(需要图片的完整路径)

        //2、将图片的路径保存到数据库(需要图片的相对路径)

        map.put("flag",1);

map.put("filepath",serverUrl+filename);

map.put("filename",filename);

//    //生成一个json响应给客户端

        return map;

}

}

③编写一个上传文件的controller:

import com.culturalrelicsys.utils.JesyFileUploadUtil;

import io.swagger.annotations.Api;

import io.swagger.annotations.ApiOperation;

import org.springframework.web.bind.annotation.PostMapping;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

import java.util.Map;

/**

* 跨域文件上传

*/

@RestController

public class UploadController {

    private final String PIC_URL = "http://localhost:8088/uploadfiles/";

    @PostMapping(value ="/doRemoteUpload")

    @ResponseBody

    public Map uploadPic(MultipartFile file) {

//调用跨服务器上传文件的工具类方法上传文件

        Map result =null;

try {

result =JesyFileUploadUtil.uploadFile(file,PIC_URL);

System.out.println("文件上传成功");

}catch (IOException e) {

e.printStackTrace();

}

return result;

}

}

④测试:file页面使用ajax上传,或者自己写一个页面用form表单也可以,注意enctype要改为enctype="multipart/form-data"

<html>

<head>

    <title>Title</title>

</head>

<body>

    选择文件:<input type="file" name="myfile" id="myfile"><br><br>

    文件描述:<input type="text" name="description" id="description"><br><br>

    <input type="button"  value="上传文件" οnclick="ajaxUpload()"><br>

    <img src="" alt="" id="img" width="200px">

</body>

<script  src="${pageContext.request.contextPath}/statics/scripts/jquery-3.6.0.min.js"></script>

<script>

  function ajaxUpload(){

//获取表单数据,并添加到FormData中

    let myfile=$("#myfile")[0].files[0];

let description=$("#description").val();

let formData=new FormData();

formData.append("myfile",myfile);

formData.append("description",description);

//发送AJAX请求

    $.ajax({

//定义请求地址

      url:"${pageContext.request.contextPath}/doRemoteUpload",

//定义请求类型

      type:"post",

//定义请求参数(使用js对象)

      data:formData,

//告诉jQuery不要去处理发送的数据,我们已经通过FormData处理了

      processData:false,

contentType:false,

//定义服务器响应的数据格式为json

      dataType:"json",

//成功响应的结果,data就是服务器返回的json对象

      success:function(data){

alert(data.msg);

if(data.flag=="1"){

$("#img").attr("src",data.content);

}

}

})

};

</script>

</html>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值