基于Spring Boot制作的档案传输工具

介绍

基于Spring Boot制作的档案传输工具,方便设备间互相传输资料。

开源地址

https://gitee.com/beautifulwei/file-transfer

安装教程

在idea中直接执行 FileTransferApplication.main。

可以打成jar包在任何有java允许环境的电脑上运行。

https://beautifulwei.gitee.io/pages/files/FileTransfer.jar 这里有已经打好的jar,可直接下载使用。

使用说明

启动项目后,先看到服务管理面板,选择好共享文件夹及运行端口后,启动服务器。(注:面板上还有一个IP选项,是由于电脑可能不止一张网卡,此项仅用于查询ip,省的去控制台打ipconfig)

项目启动后,可在其他内网设备(PC、手机)的浏览器输入 ip:port 即可进入文件列表页,显示的是面板上共享文件夹下的文件(夹),默认是项目的根目录或jar包所在文件夹。

文件列表上半部是文件夹列表,可进入下一级页面。(如果要回上一级,直接按浏览器返回键即可,懒得多敲代码了)

文件列表下半部是可下载文件,点击超链接即可开始下载档案。

最下方可选择上传文件,将档案上传到当前文件列表所在的目录下。

项目结构

本项目就这么几个文件,适合初学者学习借鉴。

主要功能(核心技术)

1. 下载,引入外部资源

@Configuration
public class MobileWebMvcConfigurer implements WebMvcConfigurer {

    /**
     * 外部资源路径
     **/
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/files/**").addResourceLocations("file:" + AppData.get().getFilePath() + File.separator);
    }
}

addResourceLocations("file:外部资源目录")

addResourceHandler("外部资源的下载目录")

例如 registry.addResourceHandler("/files/**").addResourceLocations("file:D:/")

启动服务后,浏览器输入 localhost:8080/files/test.txt 即可访问到 D:下的test.txt文件

2. 上传

fileList.html

<form id="upload" th:action="${'file/uploadFile?savePath=' + pathEncode}" 
     method="post" enctype="multipart/form-data" onsubmit="return checkFile()">
    <input id="uploadFile" type="file" name="uploadFile" multiple>
    <input type="submit" value="上传文件">
</form>

FileController

    @PostMapping(value = "/uploadFile", headers = "content-type=multipart/form-data")
    private String uploadFile(HttpServletRequest request, String savePath){
        Li.i("FileController.uploadFile ip:", WebUtils.getIpAddr(request), ", savePath:", savePath);

        MultipartHttpServletRequest multipartRequest = ((MultipartHttpServletRequest) request);
        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
        if(fileMap.size() == 0){
            return returnError(CODE_FAIL, "无上传的档案");
        }

        int successNo = 0;
        int errNo = 0;
        for (Map.Entry<String, MultipartFile> entry : fileMap.entrySet()){
            String key = entry.getKey();
            List<MultipartFile> files = multipartRequest.getFiles(key);
            if(files == null || files.size() == 0) continue;
            for (MultipartFile file : files) {
                Li.i("key:" + key + ", file:" + file.getOriginalFilename());
                if (file.isEmpty()) {
                    errNo++;
                    continue;
                }

                File dest = new File(savePath, file.getOriginalFilename());
                if(dest.exists()) {
                    Li.i("已存在:" + dest);
                    errNo++;
                } else {
                    try {
                        file.transferTo(dest);
                        Li.i("文件上传成功:" + dest);
                        successNo++;
                    } catch (IOException e) {
                        e.printStackTrace();
                        Li.i("文件上传失败:" + dest);
                        errNo++;
                    }
                }
            }
        }

        StringBuffer sb = new StringBuffer();
        if(successNo > 0){
            sb.append("上传成功:").append(successNo).append("个文件");
        }
        if(errNo > 0){
            if(successNo > 0){
                sb.append(", ");
            }
            sb.append("上传失败:").append(successNo).append("个文件");
        }

        if(errNo > 0){
            return returnError(CODE_FAIL, sb.toString());
        } else {
            return returnResult(sb.toString(), null);
        }
    }

3. javax.swing面板

效果

上述的代码只是一些关键代码,缺少辅助类可能没办法直接“拿来用”,具体实现代码,请直接参考源码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值