阿里云对象存储OSS--实现随时随地上传文件到阿里云
2017-06-02 15:17
1231 查看
需求背景:消费者多批次回馈我司生产的车载智能后视镜出现死机、连不上服务器等问题,因产品已经出到全国各地不方便去取异常log,也不可能要求消费者把log传给我们分析。
需求目标:公司内部实现远程后台上传问题机型的log。
必备条件:后视镜有SIM卡且能够联网(远程控制需要联网)、问题后视镜的IMEI号((=International Mobile Equipment Identity)
过程有点曲折,下文我尽量描述的详细些方便大家实现类似的需求。
其它的云端存储我都试过,要么关闭了开发者模式,要么开发文档不全面,最终选择了阿里云。
一、阿里云端准备工作
1、注册阿里云账户
2、登录账户进入阿里云平台,点击左上角控制台
3、进入控制台后点击右上角“产品与服务”,然后分别开通“对象存储OSS”和“访问控制”
4、对象存储OSS:开通后需要购买流量包,我买的是5块钱40G/使用6个月,还需要创建文件夹,注意购买流量包和创建文件有个区域选择,填你所在的区域,完成后如下图
5、访问控制: 访问控制开通后需要创建用户,生成accessKeyId和accessKeySecret,这两个KEY保存起来后面程序中要用
二、安卓代码部分
1、下载阿里云demo,按下图步骤
点击支持——API
点击“开放了API产品”
进入后可以看到开发列表几十项,看的很烦躁,我直接下它的demo来调试,找到下图箭头位置,sample目录,点击查看里面是GitHub代码例子,直接下载出来
2、调整代码,demo里面有个MainActivity,代码调整如下,实现了遍历文件夹,上传文件夹全部文件
// 运行sample前需要配置以下字段为有效的值
private static final String endpoint = “http://oss-cn-shenzhen.aliyuncs.com“;//固定,我所在地域是华南,城市要改成shenzhen
private static final String accessKeyId = “LTAIboGV8y0e”;//固定
private static final String accessKeySecret = “Z1S5Nzi4XnzgtYihPQeQB165”;//固定
private static final String testBucketName = “jimi0208”;//上传到 ALi OSS 中的文件夹名字,固定命名
这几个值需要调整
第一个不同的地区要改不同的城市
第二、三个值是“访问控制”里面创建的用户KEY
第四个值是“对象存储OSS”中创建的文件夹
3、上传完成后如下图,我上传的是.txt文件,可以直接获取地址打开链接来查看
完整的代码下载地址:阿里云OSS存储
也可以直接联系我QQ:1715499699
最后,demo的代码只是实现了上传功能,要实现客户端远程上传log需要将demo改造成一个Service,配置开机自启。当客户反馈某个IMEI号的机器出现问题时,我们给这IMEI号的机器推送一个上传log的指令,实现远程上传log,便于分析异常原因。
需求目标:公司内部实现远程后台上传问题机型的log。
必备条件:后视镜有SIM卡且能够联网(远程控制需要联网)、问题后视镜的IMEI号((=International Mobile Equipment Identity)
过程有点曲折,下文我尽量描述的详细些方便大家实现类似的需求。
其它的云端存储我都试过,要么关闭了开发者模式,要么开发文档不全面,最终选择了阿里云。
一、阿里云端准备工作
1、注册阿里云账户
2、登录账户进入阿里云平台,点击左上角控制台
3、进入控制台后点击右上角“产品与服务”,然后分别开通“对象存储OSS”和“访问控制”
4、对象存储OSS:开通后需要购买流量包,我买的是5块钱40G/使用6个月,还需要创建文件夹,注意购买流量包和创建文件有个区域选择,填你所在的区域,完成后如下图
5、访问控制: 访问控制开通后需要创建用户,生成accessKeyId和accessKeySecret,这两个KEY保存起来后面程序中要用
二、安卓代码部分
1、下载阿里云demo,按下图步骤
点击支持——API
点击“开放了API产品”
进入后可以看到开发列表几十项,看的很烦躁,我直接下它的demo来调试,找到下图箭头位置,sample目录,点击查看里面是GitHub代码例子,直接下载出来
2、调整代码,demo里面有个MainActivity,代码调整如下,实现了遍历文件夹,上传文件夹全部文件
public class MainActivity extends Activity { private OSS oss; // 运行sample前需要配置以下字段为有效的值 private static final String endpoint = "http://oss-cn-shenzhen.aliyuncs.com";//固定,我所在地域是华南,城市要改成shenzhen private static final String accessKeyId = "LTAIboGV8y0e";//固定 private static final String accessKeySecret = "Z1S5Nzi4XnzgtYihPQeQB165";//固定 private static final String testBucketName = "jimi0208";//上传到 ALi OSS 中的文件夹名字,固定命名 private static final String uploadFilePath = "/storage/sdcard0/C6Log/CarRecorderLog/"; private static final String TAG = "MainActivity==="; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.content_main); OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(accessKeyId, accessKeySecret); ALiApplication.saveLogFile(TAG + credentialProvider+"====="+credentialProvider.toString()); ClientConfiguration conf = new ClientConfiguration(); conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒 conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒 conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个 conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次 OSSLog.enableLog(); oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf); try { Log.i(TAG, "uploadFilePath : " + uploadFilePath); File uploadFile = new File(uploadFilePath); InputStream input = new FileInputStream(uploadFile); long fileLength = uploadFile.length(); ALiApplication.saveLogFile(TAG + "fileLength:"+fileLength); Log.i(TAG, "fileLength : " + fileLength); } catch (Exception e) { 4000 e.printStackTrace(); } // 上传 final ArrayList<String> listFileName = new ArrayList<String>(); final String dvrPath = Environment.getExternalStorageDirectory().getPath()+"/C6Log/CarRecorderLog/";//这个路径根据自己的要上传的路径修改 Log.i(TAG, "dvrPath" + dvrPath);//此处加打印查看路径是否正确 getAllFileName(dvrPath,listFileName); Button upload = (Button) findViewById(R.id.upload); upload.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new Thread(new Runnable() { @Override public void run() { int count = 0 ; for(String uploadObj:listFileName){//循环文件夹 Log.i(TAG, "run()++=listFileName: " + listFileName.get(count)); ALiApplication.saveLogFile(TAG + listFileName.toString()); String uploadObject = listFileName.get(count);//第一次是获取list 0位置的文件名 if(uploadObject != null){ new PutObjectSamples(oss, testBucketName, uploadObject, dvrPath + uploadObject).asyncPutObjectFromLocalFile(); } count++;//count每次加一 } } }).start(); } }); } public static void getAllFileName(String path, ArrayList<String> fileName) { File file = new File(path); if (!file.exists()) { return; } File[] files = file.listFiles(); ALiApplication.saveLogFile(TAG + "getAllFileName:"+ path); ALiApplication.saveLogFile(TAG + "getAllFileName:"+ files); String[] names = file.list(); ALiApplication.saveLogFile(TAG + "getAllFileName:"+ names); if (names != null){ fileName.addAll(Arrays.asList(names)); } if (files != null){ for (File a : files) { if (a.isDirectory()) { getAllFileName(a.getAbsolutePath(), fileName); } } }else{ ALiApplication.saveLogFile(TAG + "files====null"); } } }
// 运行sample前需要配置以下字段为有效的值
private static final String endpoint = “http://oss-cn-shenzhen.aliyuncs.com“;//固定,我所在地域是华南,城市要改成shenzhen
private static final String accessKeyId = “LTAIboGV8y0e”;//固定
private static final String accessKeySecret = “Z1S5Nzi4XnzgtYihPQeQB165”;//固定
private static final String testBucketName = “jimi0208”;//上传到 ALi OSS 中的文件夹名字,固定命名
这几个值需要调整
第一个不同的地区要改不同的城市
第二、三个值是“访问控制”里面创建的用户KEY
第四个值是“对象存储OSS”中创建的文件夹
3、上传完成后如下图,我上传的是.txt文件,可以直接获取地址打开链接来查看
完整的代码下载地址:阿里云OSS存储
也可以直接联系我QQ:1715499699
最后,demo的代码只是实现了上传功能,要实现客户端远程上传log需要将demo改造成一个Service,配置开机自启。当客户反馈某个IMEI号的机器出现问题时,我们给这IMEI号的机器推送一个上传log的指令,实现远程上传log,便于分析异常原因。
相关文章推荐
- thinkPHP实现对象存储oss,将图片上传到阿里云oss
- thinkPHP实现对象存储oss,将图片上传到阿里云oss
- 上传阿里云oss对象型存储 本地文件和上传流上传
- C# .net Ueditor实现图片上传到阿里云OSS 对象存储
- 上传文件到阿里云OSS对象存储,查询访问地址,删除文件
- OSS阿里云存储——整合Spring文件上传,实现动静网站资源分离
- 文件上传-阿里云OSS-存储文件
- 阿里云对象存储OSS配置介绍设置,上传代码示例
- OSS阿里云对象存储服务,java文件操作
- 阿里云oss浏览器开发(Browser-JS-SDK )实现多文件上传并监测上传进度
- ThinkPHP3.2 实现阿里云OSS上传文件
- Spring+SpringMVC+Mybatis整合百度富文本编辑器Ueditor,上传图片到阿里云OSS对象存储。
- 阿里云存储OSS golang语言上传文件示例。
- Java实现阿里云OSS云存储对象之上传图片
- 阿里云存储OSS中设置上传文件content type
- Java使用阿里云OSS对象存储上传图片
- Java使用阿里云OSS对象存储上传图片
- 在OneThink(ThinkPHP3.2.3)中整合阿里云OSS的PHP-SDK2.0.4,实现本地文件上传流程
- 阿里云OSS对象存储的实现
- 阿里云oss对象存储图片上传