精华内容
下载资源
问答
  • 主要介绍了Nodejs把接收图片base64格式保存文件存储服务器上,文中代码较简短,需要的朋友可以参考下
  • 常用文件服务器

    万次阅读 2019-03-16 15:20:13
    常用文件服务器: (主要说一些基础知识,配置过程简单,可以百度下,小编主要整理下知识点) 一、FTP 服务器 软件包: vsftpd FTP端口: 控制端口 21/tcp 数据端口 20/tcp (主动模式) 配置文件: /etc/vsftpd/...

    常用文件服务器:

    (主要说一些基础知识,配置过程简单,可以百度下,小编主要整理下知识点)

    一、FTP 服务器

    软件包: vsftpd

    FTP端口: 控制端口 21/tcp

    数据端口 20/tcp (主动模式)

    配置文件: /etc/vsftpd/vsftpd.conf

    FTP的主被动模式:

    1、主动模式首先,FTP客户端随机开启一个大于1024的端口P(2000)并与服务器的21端口建立连接,然后开放一个P+1号的端口(2001)进行监听,同时向服务器发出PORT 2001命令(PORT)命令包括客户端用什么端口接收数据)。服务器在传送数据的时个,通过自己的TCP20端口发送数据,因此FTP必须和客户端建立一具新的连接用于数据传输。

    2、被动模式在被动模式下建立控制通道类似于在主动模式下通道的操作:FTP客户端随机开启一个大于1024的端口P(1999)向服务器的21端口发起连接,同时会开启P+1号端口(2000)然后向服务器端发关PASV命令,通知服务器处于被动模式,服务器收到命令后,开放一个大于1024的端口P(1213)进行监听,然后用PORT P命令通知客户端,自己的数据端口是1213,客户端收到命令后,通过2000端口连接服务器的端品1213,然后在两端口之间进行数据传输。

    主要配置文件:/etc/vsftpd/vsftpd.conf文件:

    [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
    anonymous_enable=YES //是否允许匿名用户登录
    local_enable=YES //是否允许本地用户登录
    write_enable=YES //是否允许写(全局)
    local_umask=022 //控制本地用户上传文件的默认权限,umask表示要减掉的权限
    anon_umask=077 //控制匿名用户上传文件的默认权限
    
    chroot: 锁定本地用户HOME
    方法一:部分用户chroot
    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list
    方法二:所有本地用户chroot
    chroot_local_user=YES
    
    anon_max_rate=500000 //匿名用户限速
    local_max_rate=80000 //本地用户限速
    max_clients=500 //ftp最大连接数
    max_per_ip=2 //单个IP最大连接数,线程数
    
    local_root=/ftproot //指定本地用户访问的root目录
    anon_root=/anonroot //指定匿名用户访问的root目录

    相关文件:

    /etc/vsftpd/ftpusers //黑名单

    /etc/vsftpd/user_list //白名单

    二、NFS文件服务

    NFS:Network File System 网络文件系统,Unix系统之间共享文件的一种协议,允许网络中的计算机之间通过TCP/IP网络共享资源,但是都是明文发送,安全性能一般(建议只在局域网下使用)

    NFS 的客户端主要为Linux

    支持多节点同时挂载以及并发写入

    首先介绍 一个服务:RPC(Remote Preceduce Call )远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP/IP或UDP,为通信程序之间携带信息数据。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限制提升的可能。在OSI网络通信模型中,RPC跨域了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

    在NFS上,RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的port上去。

    NFS原理:

    NFS Server服务器上设定/data目录被分享,而客户端可以通过internet将/data目录挂载到本地的挂载点(常用mnt)后,客户端就可以进入挂载点目录进行文件的读写。NFS客户端所开放的端口是随机的我们不知道,那该怎么办呢?那是不是就不能进行数据传输了呢?答案当然是NO了那就需要另外一种服务帮他分配port了,服务是什么呢?那就是RPC服务了!

    (简单来说,就是在服务器上共享文件夹,然后客户端本地挂载使用)

    主要配置文件:

    /etc/exports :默认也是为空的,自己手动创建内容:

    # vim /etc/exports /data 192.168.95.0/24(rw,sync,no_root_squash)

    权限参数:

    rw //可读写的权限

    ro //只读的权限

    sync(同步) //资料同步写入到内存与硬盘中(慢,不容易丢数据)

    rsync(异步) //资料会暂存于内存中,而不是写入硬盘(快,容易丢数据)

    no_root_squash //客户端用root用户访问共享文件夹是,root用户不会映射成匿名用户

    root_squash //...

    all_squash //...

    anonuid = XXX //指定匿名用户UID

    anongid = XXX //...

    insecure //NFS通过1024以上端口发送

    secure //...

    hide //在NFS共享目录中不共享其子目录

    no_hide //...

    wdelay //如果多个用户写入NFS目录,则归组写入(默认)

    no_wdelay //...

    subtree_check //在共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

    no_subtree_check //...

    启动服务:

    systemctl restart rpcbind

    systemctl restart nfs

    命令介绍:

    exportfs

    showmount

    三、samba(不常用)

    CIFS: Common Internet File System Windows和Unix系统之间共享文件的一种协议

    CIFS:客户端主要是Windows

    支持多节点同时挂载以及并发写入

     

    Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成。它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。

    ​Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享

    主要配置文件:/etc/samba/smb.conf

    smb.conf文件的配置内容

    [global]:全局设置

    [homes]:用户目录共享设置

    [printers]:打印机共享设置

    [myshare]:自定义名称的共享目录设置

    [root@samba ~]# vim /etc/samba/smb.conf
    [data]
    path = /data
    ;valid users = alice jack
    ;hosts allow = 172.16.30.
    writable = yes

    FTP和NFS为主要常用的文件服务器,samba 了解就行,前面两个要求原理,配置过程等都得熟悉

     

     

    展开全文
  • NAS服务器文件服务器区别

    万次阅读 2019-10-12 11:08:49
    NAS服务器文件服务器各方面优劣对比,现在市面上出现了很多的NAS服务器品牌,看来这个市场还是很前景的,今天我们就对普通的文件服务器及NAS服务器做一下简单的对比。 网络附加存储(NetworkAttached Server,...

    NAS服务器和文件服务器各方面优劣对比,现在市面上出现了很多的NAS服务器品牌,看来这个市场还是很有前景的,今天我们就对普通的文件服务器及NAS服务器做一下简单的对比。
    网络附加存储(NetworkAttached Server,缩写为NAS)将储存设备连接到现有网络上,提供数据和文件服务。与客户通信通常采用NFS、CIFS协议。
    NAS服务器和文件服务器的对比
    文件服务器主要任务则是为网络上的计算机提供多样化的服务,如在文件共享及处理、网页发布、FTP、电子邮件服务等方面有明显的优势,这主要得益于文件服备器通常是采取高性能的CPU,与NAS相比它在数据备份、数据安全等方面并不占优势,原因有以下几点:
    1)文件服务器进行备份时,备份文件和原始文件一起存放在同一套系统中,无法分担风险,特别是防止灾难性后果的发生;
    2)文件服务器因要提供多样化的服务,从而造成自身安全性不足,任何一处服务的漏洞都可能遭受黑客的攻击而导致数据的泄露或者丢失;
    3)文件服务器自身操作系统的不稳定性会影响数据的安全性;
    4)文件服务器的备份工作需要专业人员进行操作,必须有良好的备份意识,并且需要对机器进行定期维护;
    5)文件服务器易受计算机病毒影响;
    6)不能实时备份客户端操作系统,若客户端计算机正在使用则不能进行操作系统的备份工作;
    7)耗电发热量大,一台文件服务器的整机功耗大约在300~400W之间,故此也造成文件服务器对工作环境要求比较高。
    由此可以看到,文件服务器虽然能提供备份的功能,但却存在很多不安全的因素。而NAS则是为存储备份而优化的系统
    小结:
    如果你是家庭或小企业,对文件共享及备份的需求,数据湾建议使用NAS服务器,这可以低成本有效的共享文件,备份文件。但如果你企业有一定规模,建议使用NAS及Windwos服务器协同使用,Widnwos 的活动目录可以有效的,跨系统的为整个企业提供高效的用户管理方案。可能初期投入成本较高,但在提高企业整体的工作效率,提高企业的职员因IT管理不到位,而带来不必要的经济损失,这种损失是看不见的。其实大家看看为什么那些大企业,跨国企业会投入那么高的成本来建设IT系统,就是可有效的提高工作效率,从而实现长时间的降低运营成本。

    展开全文
  • 这是后台的一个程序,可以调用摄像头进行拍照并保存到本地 ``` private static int num = 0; ...代码里的保存路径是指向的D盘,现在我想把图片保存服务器上,应该怎么修改?求详细代码,谢谢。
  • SpringBoot Mongodb文件存储服务器

    千次阅读 2019-03-24 15:57:25
    因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。由于Mongo可以支持复杂的数据结构,而且带强大的数据查询功能 2.为什么使用...
    1.Mongodb简介
    • MongoDB是一个高性能,开源,无模式的文档型数据库
    • Mongodb可以通过副本集、分片来扩展数据库性能
    • GridFS:Mongo主要解决的是海量数据的访问效率问题。因为Mongo主要是支持海量数据存储的,所以Mongo还自带了一个出色的分布式文件系统GridFS,可以支持海量的数据存储。由于Mongo可以支持复杂的数据结构,而且带有强大的数据查询功能
    2.为什么使用Mongodb存储
    • 它有分布式文件系统GridFS
    • 可以通过Mongodb的分片来水平扩展存储容量,多台分片服务器组成一个大的文件存储服务集群
    • 通过副本集来备份文件,天然支持容灾
    • 通过对比上传文件的 MD5值,实现秒传功能
    • 备份还原很方便
    3.其他资料
    4.要达到的目标,服务提供的接口
    • GET /files/list : 参数:pageIndex、pageSize 分页查询文件列表
    • GET /files/{id} : 下载某个文件
    • GET /files/view/{id} : 在线预览某个文件。比如,显示图片
    • POST /files/upload : 上传文件
    • GET /files/delete/{id} : 删除文件
    5.开始实践

    SpringBoot与MongoDB上传文件的关键是 GridFsTemplate 、GridFSBucket

    • 1.启动MongoDB,我使用了3台mongodb搭配的副本集集群
      在这里插入图片描述
    • 2.新建SpringBoot应用,添加基础依赖:
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    	<groupId>org.springframework.boot</groupId>
    	<artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>
    <dependency>
    	<groupId>cn.hutool</groupId>
    	<artifactId>hutool-all</artifactId>
    	<version>4.5.1</version>
    </dependency>
    
    • 3.添加FileController控制器,提供上面说的接口:
    @CrossOrigin(origins = "*", maxAge = 3600)
    @RestController
    @RequestMapping("files")
    public class FileController {
    
        @Autowired private IFileService fileService;
    
        /**
         * 上传文件列表
         * @param pageIndex
         * @param pageSize
         * @return
         */
        @RequestMapping("/list")
        public List<FileDocument> list(int pageIndex, int pageSize){
            return fileService.listFilesByPage(pageIndex,pageSize);
        }
    
        /**
         * 在线显示文件
         * @param id 文件id
         * @return
         */
        @GetMapping("/view/{id}")
        public ResponseEntity<Object> serveFileOnline(@PathVariable String id) {
            Optional<FileDocument> file = fileService.getById(id);
            if (file.isPresent()) {
                return ResponseEntity.ok()
                        .header(HttpHeaders.CONTENT_DISPOSITION, "fileName=" + file.get().getName())
                        .header(HttpHeaders.CONTENT_TYPE, file.get().getContentType())
                        .header(HttpHeaders.CONTENT_LENGTH, file.get().getSize() + "").header("Connection", "close")
                        .body(file.get().getContent());
            } else {
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body("File was not found");
            }
        }
    
        /**
         * 下载文件
         * @param id
         * @return
         * @throws UnsupportedEncodingException
         */
        @GetMapping("/{id}")
        public ResponseEntity<Object> downloadFileById(@PathVariable String id) throws UnsupportedEncodingException {
            Optional<FileDocument> file = fileService.getById(id);
            if(file.isPresent()){
               return ResponseEntity.ok()
                        .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; fileName=" + URLEncoder.encode(file.get().getName() , "utf-8"))
                        .header(HttpHeaders.CONTENT_TYPE, "application/octet-stream")
                        .header(HttpHeaders.CONTENT_LENGTH, file.get().getSize() + "").header("Connection", "close")
                        .body(file.get().getContent());
            }else {
                return ResponseEntity.status(HttpStatus.NOT_FOUND).body("File was not found");
            }
        }
    
        /**
         * 表单上传文件
         * 当数据库中存在该md5值时,可以实现秒传功能
         * @param file 文件
         * @return
         */
        @PostMapping("/upload")
        public ResponseModel formUpload(@RequestParam("file") MultipartFile file){
            ResponseModel model = ResponseModel.getInstance();
            try {
                if(file != null && !file.isEmpty()){
                    String fileMd5 = SecureUtil.md5(file.getInputStream());
                    FileDocument fileDocument = fileService.saveFile(fileMd5 , file);
    
                    System.out.println(fileDocument);
                    model.setData(fileDocument.getId());
                    model.setCode(ResponseModel.Success);
                    model.setMessage("上传成功");
                }else {
                    model.setMessage("请传入文件");
                }
            }catch (IOException ex){
                ex.printStackTrace();
                model.setMessage(ex.getMessage());
            }
            return model;
        }
    
        /**
         * 删除附件
         * @param id
         * @return
         */
        @GetMapping("/delete/{id}")
        public ResponseModel deleteFileByGetMethod(@PathVariable String id){
            ResponseModel model = ResponseModel.getInstance();
            if(!StrUtil.isEmpty(id)){
                fileService.removeFile(id , true);
                model.setCode(ResponseModel.Success);
                model.setMessage("删除成功");
            }else {
                model.setMessage("请传入文件id");
            }
            return model;
        }
    }
    
    • 4.FileSercieImpl上传服务实现类
        private static String collectionName = "fileDatas";
    
        @Autowired private MongoTemplate mongoTemplate;
        @Autowired private GridFsTemplate gridFsTemplate;
        @Autowired private GridFSBucket gridFSBucket;
    
        /**
         * 表单上传附件
         * @param md5
         * @param file
         * @return
         */
        @Override
        public FileDocument saveFile(String md5, MultipartFile file) {
            //已存在该文件,则实现秒传
            FileDocument fileDocument = getByMd5(md5);
            if(fileDocument != null){
                return fileDocument;
            }
    
            fileDocument = new FileDocument();
            fileDocument.setName(file.getOriginalFilename());
            fileDocument.setSize(file.getSize());
            fileDocument.setContentType(file.getContentType());
            fileDocument.setUploadDate(new Date());
            fileDocument.setMd5(md5);
            String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
            fileDocument.setSuffix(suffix);
    
            try {
                //文件存入gridfs
                String gridfsId = uploadFileToGridFS(file.getInputStream() , file.getContentType());
                fileDocument.setGridfsId(gridfsId);
                //上传的信息保存在mongodb
                fileDocument = mongoTemplate.save(fileDocument , collectionName);
            }catch (IOException ex){
                ex.printStackTrace();
            }
            return fileDocument;
        }
    
        /**
         * 上传文件到Mongodb的GridFs中
         * @param in
         * @param contentType
         * @return
         */
        private String uploadFileToGridFS(InputStream in , String contentType){
            String gridfsId = IdUtil.simpleUUID();
            //文件,存储在GridFS中
            gridFsTemplate.store(in, gridfsId , contentType);
            return gridfsId;
        }
    
        /**
         * 删除附件
         * @param id 文件id
         * @param isDeleteFile 是否删除文件
         */
        @Override
        public void removeFile(String id, boolean isDeleteFile) {
            FileDocument fileDocument = mongoTemplate.findById(id , FileDocument.class , collectionName);
            if(fileDocument != null){
                Query query = new Query().addCriteria(Criteria.where("_id").is(id));
                DeleteResult result = mongoTemplate.remove(query , collectionName);
                System.out.println("result:" + result.getDeletedCount());
    
                if(isDeleteFile){
                    Query deleteQuery = new Query().addCriteria(Criteria.where("filename").is(fileDocument.getGridfsId()));
                    gridFsTemplate.delete(deleteQuery);
                }
            }
        }
    
        /**
         * 查询附件
         * @param id 文件id
         * @return
         * @throws IOException
         */
        @Override
        public Optional<FileDocument> getById(String id){
            FileDocument fileDocument = mongoTemplate.findById(id , FileDocument.class , collectionName);
            if(fileDocument != null){
                Query gridQuery = new Query().addCriteria(Criteria.where("filename").is(fileDocument.getGridfsId()));
                try {
                    GridFSFile fsFile = gridFsTemplate.findOne(gridQuery);
                    GridFSDownloadStream in = gridFSBucket.openDownloadStream(fsFile.getObjectId());
                    if(in.getGridFSFile().getLength() > 0){
                        GridFsResource resource = new GridFsResource(fsFile, in);
                        fileDocument.setContent(IoUtil.readBytes(resource.getInputStream()));
                        return Optional.of(fileDocument);
                    }else {
                        fileDocument = null;
                        return Optional.empty();
                    }
                }catch (IOException ex){
                    ex.printStackTrace();
                }
            }
            return Optional.empty();
        }
    
        /**
         * 根据md5获取文件对象
         * @param md5
         * @return
         */
        @Override
        public FileDocument getByMd5(String md5) {
            Query query = new Query().addCriteria(Criteria.where("md5").is(md5));
            FileDocument fileDocument = mongoTemplate.findOne(query , FileDocument.class , collectionName);
            return fileDocument;
        }
        
        //文件上传列表
        @Override
        public List<FileDocument> listFilesByPage(int pageIndex, int pageSize) {
            Query query = new Query().with(new Sort(Sort.Direction.DESC, "uploadDate"));
            long skip = (pageIndex -1) * pageSize;
            query.skip(skip);
            query.limit(pageSize);
            Field field = query.fields();
            field.exclude("content");
            List<FileDocument> files = mongoTemplate.find(query , FileDocument.class , collectionName);
            return files;
        }
    
    • 5.添加 IndexController控制器,通过Thymeleaf模版渲染页面,在本项目内可以进行上传,列表查询,删除,预览,下载等
    @Controller
    public class IndexController {
    
        @Autowired
        private IFileService fileService;
        //打开index页面
        @RequestMapping("/")
        public String index(ModelMap map , @RequestParam(value = "pageIndex" , defaultValue = "1") int pageIndex,@RequestParam(value = "pageSize" , defaultValue = "10") int pageSize){
            map.addAttribute("list" , fileService.listFilesByPage(pageIndex,pageSize));
            return "index";
        }
        //打开表单上传页面
        @RequestMapping("/upload")
        public String upload(){
            return "upload";
        }
       //打开js上传页面
        @RequestMapping("/jsupload")
        public String jsupload(){
            return "jsupload";
        }
    }
    
    • 6.新建3个html页面,index.html、upload.html、jsupload.html
      在这里插入图片描述
    • 7.项目配置
    spring.application.name=mongodb-upload
    server.port=8081
    
    # thymeleaf配置,开发环境不启用缓存,正式环境下请启用缓存,提高性能
    spring.thymeleaf.cache=false
    # thymeleaf对html元素格式要求严格,设置它的mode为HTML,忘记结束标签后不会报错
    spring.thymeleaf.mode=HTML
    
    # 编码
    spring.http.encoding.charset=UTF-8
    spring.http.encoding.enabled=true
    
    # MongoDB 配置
    spring.data.mongodb.uri=mongodb://zhuyu:zhuyu@192.168.68.137:27017,192.168.68.137:27017,192.168.68.139:27017/ai?slaveOk=true&replicaSet=zypcy&write=1&readPreference=secondaryPreferred&connectTimeoutMS=300000
    
    #每个主机的连接数
    spring.data.mongodb.connections-per-host=20
    #线程队列数,它以上面connectionsPerHost值相乘的结果就是线程队列最大值
    spring.data.mongodb.threads-allowed-to-block-for-connection-multiplier=20
    spring.data.mongodb.connect-timeout=10000
    spring.data.mongodb.socket-timeout=10000
    spring.data.mongodb.max-wait-time=5000
    #控制是否在一个连接时,系统会自动重试
    spring.data.mongodb.auto-connect-retry=true
    spring.data.mongodb.socket-keep-alive=true
    
    # limit upload file size
    spring.servlet.multipart.max-file-size=30MB
    spring.servlet.multipart.max-request-size=50MB
    
    • 8.启动项目,访问 localhost:8081 ,通过表单与js两种方法上传几个文件
      在这里插入图片描述
      预览图片与txt类型的文件
      在这里插入图片描述
      在这里插入图片描述
      下载文件
      在这里插入图片描述
    • 9.通过Mongodb工具,查看MongoDB里面存储的数据,可以看到刚刚上传上去的文件被切分成一个个的chunks保存到fs.chunks中了
      在这里插入图片描述
      因篇幅原因只贴出了核心代码,代码被上传到码云上,源码下载

    上面的代码还可以更加完善,欢迎朋友们自行添加,如:鉴权—只有授权的用户才能上传文件到文件服务器

    MongoDB数据超多之后请使用索引,真实案例,有张表数据超过300万,分页查询超时,设置合理的索引后秒查
    如,按时间倒序索引:db.Global_Exception_Info.createIndex({“createDate”:-1}),正序是 1,倒序是 -1

    展开全文
  • 因为是上传的文件文件大小不定,所以我们一般会使用POST请求进行文件上传 请求URL HTTP协议 请求头: 其他的都平淡无奇,主要是看上面被标注的项 Content-Type:multipart/form-data; boundary=----...

    HTTP request header:

    请求行:

    POST /upload HTTP/1.1

    • 因为是上传的文件, 文件大小不定,所以我们一般会使用POST请求进行文件上传
    • 请求URL
    • HTTP协议

    请求头:

    其他的都平淡无奇,主要是看上面被标注的项

    Content-Type: multipart/form-data; boundary=----WebKitFormBoundarysyCsUaLV5WrP69tB

    •  Content-Type 里指明了数据是以 mutipart/form-data 来编码
    • 生成了一个 boundary 用于分割不同的字段,为了避免与正文内容重复,boundary 很长很复杂

    HTTP request body:

    • 传输的是文件,包含文件名和文件类型信息。消息主体最后以 --boundary-- 标示结束

    扩展:

    • 消息主体里按照字段个数又分为多个结构类似的部分,每部分都是以 --boundary 开始,紧接着内容描述信息,然后是回车,最后是字段具体内容(文本或二进制)

     现在可以知道,上面的name和pwd是以文本存储的,最后的文件是以binary二进制字节流存储的。

     注意:上传文件的文件体中包含了文件名和文件类型信息。

     

    后台

    先留给大家一个疑问:后台需不需要拿到HTTP request对象进行解析?

    答:不需要!

    前端传给我们数据+类型信息了,我们传统的思路是不是想通过HTTP request来获取对应信息进行解析,这时候就要说一下MultipartFile这个接口了。

    大家可以看到什么信息?

    • MultipartFile是一个接口并继承了InputStreamSource接口。

    看到了没,MultipartFile都给我们封装好了,通过MultipartFile我们就能拿到文件的所有信息,并且还可以通过transferTo很方便的将文件输出到传入的dest file中去,这就为我们将数据保存到本地提供了极大便利!!!

                    // 获取原始文件名
                    String originalFilename = file.getOriginalFilename();
                 
                    // 保存时使用的文件名
                    filename = UUID.randomUUID().toString();
    
                    file_info = originalFilename.split("\\.");
                    
                    // 获得索引
                    suffix = file_info[file_info.length-1];
                    
                    // 文件保存路径
                    parent = new File(path + suffix);
                    if(!parent.exists()){
                        parent.mkdirs();
                    }
    
                    File dest = new File(parent, filename + "." + suffix);
                    
                    // 数据传输
                    file.transferTo(dest);

    通过MultipartFile我们很方便的就实现了相关类型文件的保存!

     

    总结:前端上传文件,发送post请求,文件以二进制字节流传输,后台拿到MultipartFile文件,通过MultipartFile封装好的方法将文件保存到本地。

    展开全文
  • 下载文件后,利用gradle进行文件编译下载,启动成功后输入localhost:8080即可
  • 文件服务器存储解决方案探索

    千次阅读 2019-02-25 21:49:54
    1 定义 文件服务器(file servers)是一种器件,它的...在C/S模式下,文件服务器(file server)是一台对中央存储和数据文件管理负责的计算机,这样在同一网络中的其他计算机就可以访问这些文件. 文件服务器允许用户...
  • 文件存储 FileSaver.js是在客户端保存文件的解决方案,非常适合需要生成文件的Web应用程序,或者用于保存不应发送到外部服务器的敏感信息。 安装 与一起安装: $ component install virtru-components/filesaver ...
  • <form method="post" enctype="multipart/form-data" action="upload.do">...请选择要上传的文件:</p> <p><input type="file" name="file" /></p> <p><inp...
  • JAVA上传文件图片到服务器保存

    万次阅读 热门讨论 2017-04-10 11:58:57
    这里我记录一个比较简单方便操作的JAVA上传文件图片到服务器并且保存! 首先是页面 html的 我这是提交一个文件和类型 <div style="border: 1px solid red;"> 我是添加一张临时图片得到微信的media_...
  • 主要介绍了SpringBoot实现本地存储文件上传及提供HTTP访问服务,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • Windows文件服务器搭建

    千次阅读 2021-07-27 10:19:37
    入门级文件服务器搭建过程一、事前二、准备三、开始搭建3.1、环境安装3.2、创建用户3.2.1、更改用户密码3.2.2、删除用户3.3、创建组3.3.1、添加用户进组3.3.2、将用户从组中删除3.3.3、用户转移到其它组3.4、创建...
  • 局域网文件管理软件HFS网络文件服务器Http File Server是专为个人用户所设计的 HTTP 文件... 可以选择将设置保存在注册表或者INI文件。主程序提供卸载功能,并会自动删除自身。所以使用起来不会对操作系统做什么改动。
  • Linux下搭建FastDFS文件服务器

    万次阅读 2018-10-24 17:05:01
     FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文 件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册...
  • 搭建一个自己的文件上传服务器

    万次阅读 2019-06-12 13:46:32
    FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。 特别适合以文件为载体的在线服务,如相册...
  • android手机客户端上传文件,java servlet服务器端接收并保存服务器。 客户端和服务器端代码已完整提供,如无法使用,请联系
  • java web接收上传文件服务器端示例

    热门讨论 2015-03-15 13:58:37
    做毕业设计的时候Android端要求把相关文件传到服务器保存,目前这个就是用来接收文件上传请求的简单项目,目前就是在传送参数的时候中文会乱码,但是传送的文件不会乱码
  • springMVC上传文件服务器,数据库中存储文件路径 1.封装了文件上传执行过程,其中参数验证、异常处理等等需要自己处理。 /**  * springMVC 处理文件上传  * @param partFile 上传的文件  * @param rootPath ...
  • 自己搭建文件服务器的思路

    万次阅读 2019-01-11 22:07:04
    本人没有使用ftp服务,使用的是 java文件上传和tomcat容器虚拟器的方式实现的。 搭建的思路图如下: 具体代码如下: A.java本地java项目(关键代码) public class SysOssController { private String remote...
  • 下面我们就围绕着服务器文件存储机制来逐步介绍文件系统。一、存储介质 在单节点的存储机制中,使用的存储介质就是硬盘,硬盘又分为机械硬盘和SSD(固态硬盘): 机械硬盘 固态硬盘 SSD的优点是读取速度比机械硬盘...
  • 文件服务器和ftp服务器的区别

    千次阅读 2020-06-24 04:09:20
    但是,FTP服务器文件服务器有一些不同的变化,这可能意味着一种适合您的业务,而另一种不合适。 在能够选择适合您需求的服务器之前,至关重要的是,您必须确切了解什么是FTP服务器文件服务器。 然后,您需要更...
  • //要上传的文件 bool status = false; //连接 string serverFolder = @"\\192.168.3.66\电子竞价图纸"; string PWD = "qwer.5678";//密码 status = connectState(serverFolder, "ls", PWD); //status = ...
  • <form method="post" action="lai?action=insert" name="myfrm" id="myfrm" enctype="multipart/form-data"&...//上传文件时必须使用enctype="multipart/form-data" <input style="font-size:3em" type="text...
  • 搭建FastDFS文件上传服务器

    万次阅读 多人点赞 2018-07-27 17:34:57
    一、FastDFS介绍 ...参考:分布式文件系统FastDFS设计原理 参考:FastDFS分布式文件... 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡。主要解决了海量数据存储问题,特别适合以中小文件(...
  • 文章目录通过Everything 快速搭建局域网内文件服务器1、软件下载2、通过工具里面的Http 服务器构建局域网文件服务器3、通过局域网IP 或者自己的电脑访问 通过Everything 快速搭建局域网内文件服务器 1、软件下载 ...
  • golang实现的文件服务器

    千次阅读 2019-06-06 15:09:26
    最近在学习golang,使用golang实现了一个最简单的文件服务器,程序只有简单的十多行代码,可以编译成windows, linux, mac多平台可执行文件。 源码 package main import ( "fmt" "net/http" "os" "path/...
  • 一:文件服务器 在一个无论什么样的系统中,文件上传/下载是一个不可或缺...目前接触过的主流的分布式文件存储FasfDfs服务器和Hdfs服务器。基于目前的能力,我们这里使用了Fastdfs服务器。 这里主要是spirngboo...
  • 文件服务器(File server),又称档案伺服器,是指在计算机网络环境中,所有用户都可访问的文件存储设备,是一种专供其他电脑检索文件和存储的特殊电脑。 文件服务器通常比一般的个人电脑拥有更大的存储容量,并...
  • linux搭建文件服务器

    千次阅读 2021-01-24 15:01:29
    1、在此之前我们的nginx和FTP服务器都已经配置好了,那么现在我们来将它打通,做成一个文件服务器。例如一个图片服务器。 我们创建一个文件conf文件 sudo vim image.imooc.com.conf 用我们此前说的配置文件 sudo cat...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,688,206
精华内容 675,282
关键字:

文件存储服务器有哪些