您的位置:首页 > 编程语言 > Java开发

七牛---Java SDK常见问题总结

2016-06-11 16:22 489 查看
很多用户在使用七牛中遇到各种JAVA SDK的问题,这里总结一些常见的问题:

1.常见demo

常见demo可以参考: http://developer.qiniu.com/code/v7/sdk/java.html#upload

2.jar包依赖关系:

可以使用Maven或者Gradle来导入依赖包,或者直接导入相应的jar包,以下为依赖的jar包关系:

http://7xn15i.com1.z0.glb.clouddn.com/gson-2.3.1.jar

http://7xn15i.com1.z0.glb.clouddn.com/okhttp-3.2.0.jar

http://7xn15i.com1.z0.glb.clouddn.com/qiniu-java-sdk-7.1.0.jar

http://7xn15i.com1.z0.glb.clouddn.com/okio-1.6.0.jar

3.有关覆盖上传:

关于覆盖上传,可以参考这里的demo:http://developer.qiniu.com/code/v7/sdk/java.html#upload-cover

这里具体解释下官网上关于覆盖上传参数的设置的情况:



覆盖的意思是不同文件(文件的hash不同)同文件名的上传,同文件同文件名上传不属于覆盖上传。上传主要取决于上传过程中设置的scope的形式,如果scope为bucket的形式,那么就不允许覆盖上传,如果scope为bucket:key的形式,则表示可以覆盖上传,默认情况下insertOnly参数是0,如果设置了insertOnly参数为非0,那么不论scope为什么形式都不能覆盖上传。

4.有关断点上传:

可以参考断点上传的demo:http://developer.qiniu.com/code/v7/sdk/java.html#upload-point

断点续传的要点是需要new一个Recorder对象并且传入一个记录断点的位置(指定文件夹或的File对象), 然后实例化UploadManager对象的时候传入这个Recorder对象,上传过程中会将上传块的信息记录在断点记录的文件中,上传完成后记录值会消失。

//设置断点记录文件保存在指定文件夹或的File对象
String recordPath = "/.../...";
//实例化recorder对象
Recorder recorder = new FileRecorder(recordPath);
//实例化上传对象,并且传入一个recorder对象
UploadManager uploadManager = new UploadManager(recorder);


5.常见状态码分析:

具体的状态码的信息可以参考这个文档下: http://developer.qiniu.com/article/developer/responsebody.html#http-code

这里主要再具体解释下几种错误的状态码:

1).403

这个分为以下两种情况:

一:putPolicy中bucket:key与上传方法中的key不同,报错:

{"error":"key doesn't match with scope"}


以下为出现问题的具体的demo:

//token中设置上传的文件名为test.txt
String token = auth.uploadToken("javademo", "test.txt",3600,null,true);(生成token代码)
//put方法中设置上传的文件名为text.jpg
Response r = uploadManager.put(FilePath,"text.jpg", token,null,null, true);(上传代码段)


auth.uploadToken中指定的key和uploadManager.put中设置的key值不同导致403

二:putPolicy中设置了limited mimeType,报错:

{"error":"limited mimeType: this file type is forbidden to upload"}


以下为出现问题的具体的demo:

String token = auth.uploadToken("javademo", "test.txt",3600,new StringMap().put("mimeLimit", "image/*"),true);
Response r = uploadManager.put(FilePath, "test.txt", token,null,null, true);


FilePath如果为txt文件,则上传会报错。

2).579

579表示上传的时候设置了回调,上传是成功的,但是回调是失败的,这种情况需要首先排除下用户自己服务器是否是正常的,可以自己构造一个回调的请求(例如用curl来模拟),看服务器是否可以正常收到这个请求:

eg:curl -vX POST “URL” -d “name=123.jpg”

用户那边如果能够正常打印出该内容,说明用户的接收程序是没有问题的。

如果没有问题的话可以将token和reqid提供下。

另外可以参考下这里的文章下:http://blog.csdn.net/netdxy/article/details/49023099

3).401

一、报错:{“error”:”expired token”},{“error”:”token out of date”}

处理方法:

1、将token的有效期设置的长一些。对于比较大的文件,可以适当加长有效期(默认是3600秒)
2、看下自己的服务器时间是否是联网时间。如果时间不准,导致签名后的结果可能已经是过期的了
3、建议客户每次上传都重新请求一次上传token。或者设置的时间长些


二、报错:{“error”:”bad token”,”reqid”:”t1wAAHuwANZHl9YT”,”details”:[“UP:4/401”],”code”:401}

处理方法:

1、检查密钥(ak,sk复制黏贴有误)信息是否正确。
2、数字签名错误(签名方法是自己写的), 建议使用sdk中封装的方法。
3、检查上传参数,上传token由三部分组成(由冒号隔开),最后一段,用base64解码,可以看到你的上传策略中的参数,如果参数有问题也会报401。
4、如果使用我们的sdk生成的token出现的问题,把token给我们(七牛后台耳机图标:提交工单), 如果是自己写的,请检查token生成的相关代码。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: