发表于: 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. 关于类的初始化
静态初始化块只在类加载时执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。
非静态初始化块在每次初始化实例对象的时候都执行一次,可以给任意变量赋值。
构造方法在每次初始化实例对象时调用。
加载顺序:
- 在加载类时执行一次静态初始化块(之后不再调用)。
- 在每次初始化实例对象时:先执行非静态初始化块,再执行构造方法。
进度:
任务开始时间:10.30
预计完成时间:11.6
有,东西多,不好整合
禅道:http://task.ptteng.com/zentao/project-task-264.htm
评论