Springboot+Apache2或者Tomcat实现远程linux服务器上传下载文件

需求:将文件上传到远程服务器,并提供下载功能。

解决方式:利用Apache2、Tomcat或者FTP搭建文件服务器。

关于Apache2、Tomcat、FTP的部署网上教程很多就不细说了。这三种我都使用过,主要分成两个方法:

如ftp可以与java项目连接后直接对其进行上传下载操作,这种方法网上有不少教程;

而如果使用Apache2、Tomcat没办法直接对其上传,使用只能在服务器部署一个项目来完成对服务器文件的操作,下面主要讲的就是这种如何实现。搭建好Apache2、Tomcat、FTP中的一个服务后,建立一个保存文件的目录,我用的apache2,所以把文件放在了/var/www/下面建了一个file文件夹。然后需要两个springboot项目,一个作服务端一个做客户端。

客户端:

前端页面:

 
<input id="cert" type="file" onchange="submit()" />


function submit() {
        var formData = new FormData();
        formData.append('file', $("#cert")[0].files[0]); //生成一对表单属性
        console.log(formData)
        $.ajax({
            type: "POST", //因为是传输文件,所以必须是post
            url: '/upload', //对应的后台处理类的地址
            data: formData,
            processData: false,
            contentType: false,
            success: function(data) {
                   
            }
        });
    }

客户端后台接口: 

@ApiOperation(value = "上传图片接口")
    @PostMapping(value = "/upload")
    public String upload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "失败";
        }
        JSONObject postData = new JSONObject();
        String fileName = file.getOriginalFilename();//上传的文件名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));//获取后缀
        fileName = UUID.randomUUID() + suffixName;//生成唯一文件名
        try {
            byte[] fileBytes = file.getBytes();//转换为byte数组
            postData.put("fileName",fileName);
            postData.put("data",fileBytes);
            RestTemplate client = new RestTemplate();
            //FilePath是你服务端的项目接口路径
            JSONObject json = client.postForEntity(FilePath, postData, JSONObject.class).getBody();
            logger.info("上传成功");
            return json.get("data");//返回文件下载地址
        } catch (IOException e) {
            logger.error(e.toString(), e);
        }
        logger.info("上传失败");
        return "失败";
    }

 上传成功后返回的就是文件的下载地址。

服务端接口:

@RestController
@RequestMapping(value = "upload")
@Slf4j
public class API {
    /**
     * 访问服务器文件路径端口 
     */
    @Value(value="${filePath}")
    private String imgPath;
    /**
     *  服务器保存文件路径
     */
    @Value(value="${uploadHost}")
    private String uploadHost;

    /**
     *  项目host路径
     */
    @ApiOperation(value = "上传图片接口", notes = "")
    @PostMapping(value = "/upImg")
    public JSONObject upImg(@RequestBody String json) {
        JSONObject jsonObject =new JSONObject();
        byte[] bfile = JSONObject.parseObject(json).getBytes("data");
        String fileName =JSONObject.parseObject(json).getString("fileName");
        byte2File(bfile,uploadHost,fileName);
        if (json.isEmpty()) {
            return null;
        }
        try {
            log.info("上传成功");
            jsonObject.put("data",imgPath+fileName);
            return jsonObject;
        } catch (Exception e) {
            log.info("上传失败");
            jsonObject.put("message",e.toString());
        }
        return jsonObject;
    }

//byte数组转file文件方法
    public static void byte2File(byte[] bfile,String filePath,String fileName){
        BufferedOutputStream bos=null;
        FileOutputStream fos=null;
        File file=null;
        try{
            File dir=new File(filePath);
            if(!dir.exists() && !dir.isDirectory()){//判断文件目录是否存在
                dir.mkdirs();
            }
            file=new File(filePath+fileName);
            fos=new FileOutputStream(file);
            bos=new BufferedOutputStream(fos);
            bos.write(bfile);
        }
        catch(Exception e){
            System.out.println(e.getMessage());
            e.printStackTrace();
        }
        finally{
            try{
                if(bos != null){
                    bos.close();
                }
                if(fos != null){
                    fos.close();
                }
            }
            catch(Exception e){
                System.out.println(e.getMessage());
                e.printStackTrace();
            }
        }
    }

}

服务端配置文件application.yml

server:
  port: 8099


#访问服务器文件路径端口
filePath: http://你的IP:88/
#服务器保存文件路径
uploadHost: /var/www/file/

猜你喜欢

转载自blog.csdn.net/qq_36802726/article/details/88748319