最近工作中遇到的8个问题(2019-09-11),Java文件大小,Fastdfs下载文件指定文件名,springloaded热部署有局限性,数据库表同步-2种方式

1、Java文件大小

    用 file.length()方法。

    getTotalSpace, getFreeSpace 查询的是 磁盘(分区)空间。

(磁盘分区大小方法,放在文件File的API里,很容易让人产生歧义)

        File file = new File(filePath);

        double fileLength = length(file.length());

        double used = length2(file.getTotalSpace() - file.getFreeSpace());

        double total = length2(file.getTotalSpace());

        double free = length2(file.getFreeSpace());

        System.out.println("fileLength=" + fileLength);

        System.out.println("used=" + used);

        System.out.println("total=" + total);

        System.out.println("free=" + free);

  

    private static double length(long length) {

        return length;

    }

 

    private static double length2(long length) {

        return 1.0 * length / (1024 1024*1024);

    }

输出:

fileLength=69120.0  (文件大小为69120字节)
used=77.01800537109375
total=123.81933212280273(总大小123G,符合事实)
free=46.801326751708984(可用,46.8G,符合事实)

最近工作中遇到的8个问题(2019-09-11),Java文件大小,Fastdfs下载文件指定文件名,springloaded热部署有局限性,数据库表同步-2种方式_第1张图片

 

 

2、jenkins Maven打包,没更新,加了 clean了。

啥情况呢?

从 打包的jar文件时间来看,不是最新的。初步感受是,代码也不是最新的。

目前不能100%确认。

需要关注下。

 

3、Fastdfs上传文件,扩展名,文件后缀 必填。

public String uploadFile(File file) throws IOException {

     log.info("one file,length:{},totalSpace:{}",file.length(),file.getTotalSpace());

     String extension = FilenameUtils.getExtension(file.getName());

     //Fastdf扩展名不能为空,默认为"txt"

     if(StringUtils.isEmpty(extension)){

         extension="txt";

     }

     StorePath storePath = storageClient.uploadFile(new FileInputStream(file), file.length(),

             extension, null);

     return getResAccessUrl(storePath);

 }

 

 

4、文件大小可以为0。

下载文件的时候,判断了大小为0,不下载。

这样是有问题的。

存在文件大小为0的文件。

 

5、Linux设置时间

date -s '2019-09-11 14:54'

记得带引号

(每次都忘记,记不住啊)

 

 

6、springloaded热部署

好处是,普通代码,比如实体类的属性,改完代码保存就生效。

缺点是,代码改动,就“重新加载”,debug时,上下文变量根本看不到。也就是说,如果是debug,还是得重启啊。
这个技术是有很大“局限性”的。

 

 

7、fastdfs下载时恢复原始文件名(尚未验证)

文件被上传到FastDFS后Storage服务端将返回的文件索引(FID),其中文件名是根据FastDFS自定义规则重新生成的 例如:wKgB-lkdxUmAPb-QAAIbD3CxJDw317.txt,而不是原始文件名,使用http下载时如不加处理,显示给用户的文件名会是这样的wKgB-lkdxUmAPb-QAAIbD3CxJDw317.txt,这样的用户体验很不好。由于FastDFS不会存储原始文件名,也不提供回复原始名的方法,我们需要自己实现

 

那么就需要我们将原始文件名记录在数据库中,在下载的时候将原文件名传递到服务器,然后用nginx获取到原始文件名,在写入响应头里面

 

 

 

http://192.168.1.124:8000/group2/M00/00/00/wKgB-Vkb2yuAEk80AAAABpDVNbM781.txt?attname=name.txt

 

 

if ($arg_attname ~* \.(doc|docx|txt|pdf|zip|rar|txt)$) {

    add_header Content-Disposition "attachment;filename=$arg_attname";

}

————————————————

版权声明:本文为CSDN博主「菜鸟里根」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/sunqingzhong44/article/details/72852751

 

8、数据库表同步,2种方式

A表和B表,需要同步到A1、B1。

“看似简单”的方式,查询A,再关联A的多个B。

经过加工,保存到A1和多个B1。

 

又有新需求,B1中有文件下载,增加了C1表。

 

以此类推,表越来越多,任务越来越多,同步很容易出错。

某个字段变化了,是否需要更新呢?业务要求能更新吗?

怎么防重。

 

因此有了第2种方式,

A表到A1。

B表到B1。

可以做成2个独立的任务。

 

A1产生C1 或 B1产生 C1,再单独加任务。

拆分成“流水线”式的,思路清晰,代码简单,事务可控,增加更新也简单,排查问题也方便。

都是泪。

你可能感兴趣的:(工作问题)