发表于: 2017-11-04 23:49:34

2 711



今天完成的事情:

1. 阿里云文件下载完成

2. 腾讯云上传完成

3. 图片迁移遇到问题

明天计划的事情

1.  图片迁移弄好

2. 了解邮箱


遇到的问题:

1. 图片迁移遇到问题

在下载文件的类里读取数据流长度还有,但是作为返回值返回后再次读取长度为0 

当当返回值换为

OSSObject

时,给流时,长度还是为0,但可以读取到文件信息。????


找到了问题所在,当关闭oss连接后 

InputStream

中的数据就没有了,ossClient连接不关闭就有???

即使序列化保存也不行???


真正的原因:

InputStream 如同水管,不论如何赋值,最终只会从源头读数据。

而序列化不能保存其值:

InputStream比作水杯的水,那么不断地赋值就如同插入水管  ,最终只会从源头读数据。

 把以下为源头

ossObject = ossClient.getObject(bucketName, firstKey);


当关闭ossClient连接后,ossClient为null,ossObject当然读取不到数据了


解决办法:

1. 存入ByteArrayOutputStream缓存里,缺点为如果是大文件就很耗费内存

2. 通过mark和reset方法重复利用InputStream  ,这个还不理解还要看看



参考资料:

InputStream为什么不能被重复读取?

读取InputStream的方法

通过mark和reset方法重复利用InputStream



收获:

1. 阿里云文件下载完成

//获取文件
ossObject = ossClient.getObject(bucketName, firstKey);
//获取文件元信息
ObjectMetadata metadata = ossObject.getObjectMetadata();
Long fileLength = metadata.getContentLength();



2. 腾讯云上传完成

腾讯云的SDK文档不全面,需要自己查看源码来看看支持什么类型。支持流和文件参数。

但是文档上只说了以文件的方式穿


在ClientCinfig 如果使用spring的配置文件来进行参数注入,注意ClientCinfig 的构造方法里需要new一个Region

但是!!!!

如果需要在实例化的时候就要new Regin,否则就报错,那么

setRegion的方法存在意义何在???

spring的配置文件


<bean id="ClientConfig" class="com.qcloud.cos.ClientConfig" >
   <constructor-arg name="region" value="ap-chengdu"/>
   <property name="maxConnectionsCount" value="200"/>
   <property name="socketTimeout" value="1000"/>
   <property name="connectionTimeout" value="5000"/>
   <property name="connectionRequestTimeout" value="5000"/>
</bean>

红字为把参数注入构造方法


3. 关于类的初始化

静态初始化块只在类加载时执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。

非静态初始化块在每次初始化实例对象的时候都执行一次,可以给任意变量赋值。

构造方法在每次初始化实例对象时调用。


加载顺序:

  1. 在加载类时执行一次静态初始化块(之后不再调用)。
  2. 在每次初始化实例对象时:先执行非静态初始化块,再执行构造方法。



进度: 

         任务开始时间:10.30

         预计完成时间:11.6

         有,东西多,不好整合

禅道:http://task.ptteng.com/zentao/project-task-264.htm





返回列表 返回列表
评论

    分享到