ks3的callback现在是原子性的,callback成功,对象上传成功,callback失败,对象上传失败。put一个对象到ks3的时候可以自定义callback,callback失败以后会ks3会删除该对象。在上传完成到callback失败的过程中,只有ks3知道这个对象的存在,我们外部用户对这个对象是不可见的。

服务端如下:

  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "time"
  5. )
  6. func main() {
  7. r := gin.Default()
  8. r.GET("/success", func(c *gin.Context) {
  9. c.JSON(200, gin.H{
  10. "result": true,
  11. })
  12. })
  13. r.GET("/fail", func(c *gin.Context) {
  14. c.JSON(200, gin.H{
  15. "result": false,
  16. })
  17. })
  18. r.POST("/success", func(c *gin.Context) {
  19. c.JSON(200, gin.H{
  20. "result": true,
  21. })
  22. })
  23. r.POST("/fail", func(c *gin.Context) {
  24. time.Sleep(time.Duration(20)*time.Second)
  25. c.JSON(200, gin.H{
  26. "result": false,
  27. })
  28. })
  29. r.Run(":80") // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
  30. }

先用go run main.go把服务端跑起来。

客户端代码如下:

  1. <?php
  2. require_once "ks3-php-sdk/Ks3Client.class.php";
  3. $client = new Ks3Client("$accessKey",
  4. "$secretKey","ks3-cn-beijing.ksyun.com");
  5. //echo $client->listBuckets();
  6. //上传文件
  7. $content = fopen("./cloud.png", "r");
  8. $args = array(
  9. "Bucket"=>"ks3-callback-test-bj",
  10. "Key"=>"cloud.png",
  11. "Content"=>array(//要上传的内容
  12. "content"=>$content,//可以是文件路径或者resource,如果文件大于2G,请提供文件路径
  13. "seek_position"=>0//跳过文件开头?个字节
  14. ),
  15. "ACL"=>"public-read",//可以设置访问权限,合法值,private、public-read
  16. "ObjectMeta"=>array(//设置object的元数据,可以设置"Cache-Control","Content-Disposition","Content-Encoding",
  17. //"Content-Length","Content-MD5","Content-Type","Expires"。当设置了Content-Length时,
  18. //最后上传的为从seek_position开始向后Content-Length个字节的内容。当设置了Content-MD5时,系统会在服务端进行md5校验。
  19. "Content-Type"=>"binay/ocet-stream"
  20. //"Content-Length"=>4
  21. ),
  22. "UserMeta"=>array(//可以设置object的用户元数据,需要以x-kss-meta-开头
  23. "x-kss-meta-test"=>"test"
  24. ),
  25. "CallBack"=>array(
  26. // "Url"=>"http://110.3.3.11/success",
  27. "Url"=>"http://110.3.3.11/fail",
  28. "BodyMagicVariables"=>array("bucket"=>"bucket","key"=>"key"),//魔法变量,key=>value中的value将被最后的实际值替换,
  29. //比如"bucket"=>"bucket"替换为"bucket"=>"<上传的bucket>"。支持:"bucket","key","etag","objectSize","mimeType","createTime"
  30. "BodyVariables"=>array("name"=>"lijunwei")//自定义KS3回调时需要在body中带的参数
  31. )
  32. );
  33. echo "*******************";
  34. try {
  35. echo $client->putObjectByFile ($args);
  36. } catch (Ks3ServiceException $exception) {
  37. echo $exception;
  38. }
  39. echo "*******************";

在控制台执行php index.php就可以。

分类: web

标签:   golang   php