Kii BLOG

将文件发布成可访问的URL

(一)概述

Kii Cloud可以把上传云端的文件发布成一个可以访问的URL,此功能类似于网络硬盘,也可以使用该功能实现类似 http://www.sendspace.com/这个网站实现的功能,就如QQ的网络硬盘一样,发布URL时可以设置有效时间,如果URL过期,将不能被访问。本文档将从Kii Cloud如何上传文件、如何发布文件等几方面进行阐述,同时提供示例app代码,后面都将基于该示例app进行说明,下面是代码链接下载地址:

PublishFiles

 

(二)上传文件

这里采用的是支持断点续传的方式上传的文件,同样需要通过单独的线程执行,首先需要创建KiiUploader,其相关代码如下:

 

        	File localFile = new File(Environment.getExternalStorageDirectory(), 
        			mEditTextFileName.getText().toString());
        	try {

        	    // Create a KiiUploader
        	    kfile = Kii.fileBucket("MyBucket").file();
        	    uploader = kfile.uploader(getApplicationContext(), localFile);
        	} catch (Exception e) {
        	    ...
        	}

这里值得注意的是创建KiiUploader是在已登陆的当前用户至上创建的,如果在用户登录之前创建则会失败,本示例app中省略了注册和登陆的交互过程,而是使用已经注册的用户在代码中直接完成登录。

接下来是文件的上传,其相关代码如下:

        	try {
        	  // Start uploading the file.
        	  uploader.transfer(
                      new KiiRTransferCallback()
                      {
                          public void onProgress(KiiRTransfer operator,
                              long completedInBytes,
                              long totalSizeinBytes) {
                              dialog.setProgress((int)((completedInBytes*100)/totalSizeinBytes));
                              }
                      }
                    );
        	} catch (AlreadyStartedException e) {
        	  // Upload already in progress.
        	  // You can cancel the call and wait for the upload to complete.
        	} catch (SuspendedException e) {
        	  // Upload suspended due to a network error or user interruption.
        	  // You can resume the upload.
        	} catch (TerminatedException e) {
        	  // Upload terminated due to an error (e.g., the target file not found)
        	  // or user interruption.
        	} catch (StateStoreAccessException e) {
        	  // Failed to access the local storage.
        	  // This is a rare error; you should be able to safely retry.
        	}

上传文件的最后一步就是save操作,如果不进行save,那么文件将不会保存到Kii Cloud, save的相关代码如下:

        	try {
          	    kfile.save();
          	    mUri = kfile.toUri();
        	} catch (Exception e) {
                   ...
        	}

 

 (三)显示上传进度

在调用transfer时支持回调函数来实现上传进度的显示,可以获取以字节为单位的上传文件的大小和已上传的字节数,本实例代码中将其量化成了百分比,相关回调函数代码如下:

                      new KiiRTransferCallback()
                      {
                          public void onProgress(KiiRTransfer operator,
                              long completedInBytes,
                              long totalSizeinBytes) {
                              dialog.setProgress((int)((completedInBytes*100)/totalSizeinBytes));
                              }
                      }

 

(四)发布文件

发布文件时需要注意URL的有效期,如果不指定有效期,该URL将永久有效,相关代码如下,在本示例app中为了便于测试,指定有效期为1分钟:

        	try {
           	  // Create a KiiFile instance
                  KiiFile kFile = KiiFile.createByUri(mUri);
        	  // Set the expiration time (24 hours from now)
        	  long expiration = System.currentTimeMillis() + 60 * 1000;
        	  // Publish the file
        	  mPublishedUri = kFile.publish(expiration);
        	  // The file is now accessible with publishedUri.
        	} catch (AppException e) {
        	  // handle error
        	} catch (IOException e) {
        	  // handle error
        	}

 

(五)基于示例app的测试

通过示例app可以测试文件上传,发布为URL以及该URL的访问,app总体运行界面如下图所示:

PublishFiles

在示例代码压缩包里有一个图片文件“”Desert.jpg”,首先通过DDMS把该文件上传到SD卡目录下,关于如何上传文件请参考本人的另外一篇博客 通过Kii Sync实现文件夹同步 ,上传完毕后,在最上面的编辑框内输入该文件名,点击“Upload”按钮,此时会显示上传的进度,其效果如下图所示:

Uploading

 

上传文件成功之后,点击“Publish”按钮完成文件的发布,其URL会显示在对应的文本框里,发布成功之后点击“Go”按钮,就可以通过网页打开或下载上传的那个文件,为了测试失效时间,可以选择发布1分钟后打开URL,你会发现此时该URL已经失效。

 

(六)总结

通过以上分析,可以看出通过Kii Cloud上传文件并发布成可访问的URL非常简单,基于该功能可以方便的实现类似网络硬盘的功能,后续文章中还会对Kii Cloud的文件存储做进一步的分析说明。

发表评论

电子邮件地址不会被公开。 必填项已用*标注