自己搭建文件服务器的思路

简介: 自己搭建文件服务器的思路

搭建的思路图如下:


1dc618a0ed9580ce8bfa6facb208c08f.png

具体代码如下:


A.java本地java项目(关键代码)


public class SysOssController {
    private String remoteServer = "http://x.x.x.x:xxxx";
    private String remoteFileUri = "http://http://x.x.x.x:xxxx/uploadservice/uploadService";
     /**
     * 上传文件
     */
    @RequestMapping("/upload")
//   @RequiresPermissions("sys:oss:all")
    public R upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws Exception {
        if (file.isEmpty()) {
            throw new RRException("上传文件不能为空");
        }
        String fileName = StringUtils.cleanPath(file.getOriginalFilename());
        String prefix = UUID.randomUUID().toString().replaceAll("-", "");
        String suffix = fileName.substring(fileName.lastIndexOf("."));
        File tempFile = null;
        String url = "";
        //上传到指定的服务器项目
        if(ConstantUtil.UPLOADSWITCH==1){
            try {
                tempFile = File.createTempFile(prefix, suffix);
                if (!file.isEmpty()) {
                    String serverUrl =  remoteFileUri + "/save";
                    RestTemplate restTemplate = new RestTemplate();
                    file.transferTo(tempFile);
                    //构建 HttpEntity
                    HttpHeaders headers = new HttpHeaders();
                    headers.setContentType(MediaType.MULTIPART_FORM_DATA);
                    MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
                    body.add("file", new FileSystemResource(tempFile));
                    HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(body, headers);
                    ResponseEntity  re = restTemplate.postForEntity(serverUrl, requestEntity, String.class);
                    if(re.getStatusCode().value()==200){
                        url = re.getBody()+"";
                    }else {
                        url= "";
                    }
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                if (tempFile != null) {
                    tempFile.delete();
                }
            }
        }else if (ConstantUtil.UPLOADSWITCH==2){ //上传到云文件服务器上
            //上传文件
             url = OSSFactory.build().upload(file);
        }
        if(!StringUtils.isEmpty(url)){
            //保存文件信息
            SysOssEntity ossEntity = new SysOssEntity();
            ossEntity.setUrl(url);
            ossEntity.setCreateTime(new Date());
            sysOssService.save(ossEntity);
        }
        R r = new R();
        r.put("url", remoteServer + url);
        r.put("link", url);
        return r;
    }


B 远程服务器上的 文件上传服务项目(关键代码)


@Controller
@CrossOrigin
@RequestMapping("/uploadService")
public class FileUploadController {
@PostMapping("/save")
    @ResponseBody
    public String handleFileUploadSave(@RequestParam("file") MultipartFile file) {
        String filename = "";
        // MultipartFile是对当前上传的文件的封装,当要同时上传多个文件时,可以给定多个MultipartFile参数(数组)
        if (!file.isEmpty()) {
            String type = file.getOriginalFilename().substring(file.getOriginalFilename().indexOf("."));// 取文件格式后缀名
            filename = System.currentTimeMillis() + type;// 取当前时间戳作为文件名
//          String path = "d:/"+filename;// 存放位置
            //String path = request.getSession().getServletContext().getRealPath("/upload/" + filename);// 存放位置
    //      String path = "D:/load/tomcat8.0.53/webapps/upload/images/" + filename;
    //      String path = "D:/upload/images/" + filename;
            String path = "/usr/local/upload/images/" + filename;
            File destFile = new File(path);
            try {
                // FileUtils.copyInputStreamToFile()这个方法里对IO进行了自动操作,不需要额外的再去关闭IO流
                FileUtils.copyInputStreamToFile(file.getInputStream(), destFile);// 复制临时文件到指定目录下
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return    "/upload/images/" + filename;
    }
}


c 远程服务器保存的目录


/usr/local/upload/images


d 远程服务器上的web服务器tomcat的虚拟目录的配置


conf/server.xml
 <Context docBase="/usr/local/upload/images" path="/upload/images" reloadable="true"/>
 </Host>



e数据库的保存文件目录url如下(存的是相对路径,显示的时候在后台a项目上拼上远程tomcat服务地址):


5d4c6812c8535adbb050f4ddf2e1bce8.png


a项目返回给浏览器回显url时候,只显示文件名(如果想显示全路径可以不做处理)


<Form-item label="照片" prop="picUrl">
                        <i-hidden v-model="lwHomePicture.url" placeholder="请上传宽1200像素,高60像素的图片" readonly/>
                        <i-input v-model="picUrl" placeholder="请上传宽1200像素,高60像素的图片" readonly/>
                    </Form-item>


let vm = new Vue({
  el: '#rrapp',
  data: {
     picUrl:""
     },
     methods:{
      getInfo: function(id){
             Ajax.request({
                 url: "../lwhomepicture/info/"+id,
                 async: true,
                 successCallback: function (r) {
                     vm.lwHomePicture = r.lwHomePicture;
                     var url = vm.lwHomePicture.url;
                     if(url)vm.picUrl = url.substring((url.lastIndexOf("\/") + 1), url.length);
                 }
             });
    },
  handleSuccess: function (res, file) {
             vm.lwHomePicture.url = file.response.url;
             var url = file.response.url;
             if(url)vm.picUrl = url.substring((url.lastIndexOf("\/") + 1), url.length);
         },
     }
相关文章
|
缓存 安全 网络协议
手把手教你如何搭建自己的文件服务器
由于FTP、HTTP、Telnet等协议的数据都是使用明文进行传输的,因此从设计上就是不可靠的。人们为了满足以密文方式传输文件的需求,发明了vsftpd服务程序。vsftpd(very secure ftp daemon,非常安全的FTP守护进程)是一款运行在Linux操作系统上的FTP服务程序,不仅完全开源而且免费。此外,它还具有很高的安全性、传输速度,以及支持虚拟用户验证等其他FTP服务程序不具备的特点。在不影响使用的前提下,管理者可以自行决定客户端是采用匿名开放、本地用户还是虚拟用户的验证方式来登录vsftpd服务器。这样即便黑客拿到了虚拟用户的账号密码,也不见得能成功登录vsftpd服
1935 0
|
5月前
|
前端开发
若依修改,前端部署最初的样子,Ngnix部署最初的模样,配置域名/,就能够访问,最初的Ngnix的配置是怎样写的
若依修改,前端部署最初的样子,Ngnix部署最初的模样,配置域名/,就能够访问,最初的Ngnix的配置是怎样写的
|
6月前
|
网络协议 Oracle 关系型数据库
一篇文章讲明白HVR数据复制软件部署之(一)
一篇文章讲明白HVR数据复制软件部署之(一)
27 0
|
存储 机器学习/深度学习 负载均衡
用FastDFS一步步搭建文件管理系统 上
用FastDFS一步步搭建文件管理系统 上
202 0
用FastDFS一步步搭建文件管理系统   上
|
存储 Java Unix
用FastDFS一步步搭建文件管理系统 下
用FastDFS一步步搭建文件管理系统 下
287 0
用FastDFS一步步搭建文件管理系统   下
|
存储 JavaScript 关系型数据库
写给大忙人看的 - 搭建文件服务器 MinIO(1)
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
325 0
写给大忙人看的 - 搭建文件服务器 MinIO(1)
|
Web App开发 存储 前端开发
面试装X:我知道的前端跨页面通信
本篇文章就是对前端跨页面通信的解决方案做了一个了解。
403 0
|
存储 机器学习/深度学习 SQL
如何三步搭建一套声纹系统
声纹检索,顾名思义就是说话人识别,通过声音来验证或者识别说话人的声音。声纹识别的关键步骤就是声音向量化,将说话人的声音将其转化成结构化的向量。阿里云AnalyticDB向量版,提供了一套声纹验证检索的解决方案。用户只需要使用简单的几条SQL命令,三步之内就可以搭建一套高精度的声纹检索验证服务。
805 0
如何三步搭建一套声纹系统
|
PHP 数据库 安全
创建高安全性PHP网站的几个实用要点
大家都知道PHP已经是当前最流行的Web应用编程语言了。但是也与其他脚本语言一样,PHP也有几个很危险的安全漏洞。所以在这篇教学文章中,我们将大致看看几个实用的技巧来让你避免一些常见的PHP安全问题。
1330 0