免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2310 | 回复: 0
打印 上一主题 下一主题

[FastDFS] FastDFS分块上传,返回错误22,请大侠帮忙? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-05-18 13:58 |只看该作者 |倒序浏览
本帖最后由 曾昭强 于 2015-05-18 14:12 编辑

在使用FastDFS API“storage_modify_by_filebuff1”上传文件时,返回错误22,即无效的参数。现将部分代码贴出来,请各位大侠帮忙指正?另外: FastDFS版本是5.05
  1. void FileServiceFastDfs::AsyncWriteFile(::google::protobuf::RpcController* controller,
  2.                        const ::FileChunk* request,
  3.                        ::WriteResponse* response,
  4.                        ::google::protobuf::Closure* done)
  5. {
  6.         ConnectionInfo *pTrackerServer;
  7.         ConnectionInfo *pStorageServer;
  8.         ConnectionInfo storageServer;
  9.         ConnectionInfo trackerServer;
  10.         int result;
  11.         char group_name[FDFS_GROUP_NAME_MAX_LEN + 1];
  12.         char remote_filename[256];
  13.         FDFSMetaData meta_list[32];
  14.         int meta_count;
  15.         char file_id[128];
  16.         int store_path_index;
  17.         FDFSFileInfo file_info;
  18.         const char *file_ext_name;


  19.         pTrackerServer = tracker_get_connection_r(&trackerServer, &result);
  20.         if (pTrackerServer == NULL)
  21.         {
  22.                 response->set_error(-1);
  23.                 return;
  24.         }

  25.         // 第一个分块(上传没有问题,成功返回file_id)
  26.         if (request->offset() == 0)
  27.          {
  28.                 *group_name = '\0';
  29.                  store_path_index = 0;
  30.                 if ((result = tracker_query_storage_store(pTrackerServer, &storageServer, group_name, &store_path_index)) != 0)
  31.                  {
  32.                         printf("tracker_query_storage fail, " \
  33.                                  "error no: %d, error info: %s\n", \
  34.                                 result, STRERROR(result));
  35.                         response->set_error(-1);
  36.                          tracker_disconnect_server_ex(pTrackerServer, true);
  37.                         return;
  38.                  }

  39.                 if ((pStorageServer = tracker_connect_server(&storageServer, &result)) == NULL)
  40.                  {
  41.                         response->set_error(-1);
  42.                          tracker_disconnect_server_ex(pTrackerServer, true);
  43.                         return;
  44.                 }

  45.                 file_ext_name = fdfs_get_file_ext_name(request->uuid().c_str());
  46.                 memset(&meta_list, 0, sizeof(meta_list));
  47.                 meta_count = 0;

  48.                 if (file_ext_name)
  49.                 {
  50.                         strcpy(meta_list[meta_count].name, "ext_name");
  51.                         strcpy(meta_list[meta_count].value, file_ext_name);
  52.                         meta_count++;
  53.                 }

  54.                 result = storage_upload_appender_by_filebuff1(
  55.                                 pTrackerServer, pStorageServer,
  56.                                 store_path_index, request->data().c_str(),
  57.                                 request->data_size(), file_ext_name,
  58.                                 meta_list, meta_count,
  59.                                 group_name, file_id);
  60.                 if (result != 0)
  61.                 {
  62.                         tracker_disconnect_server_ex(pStorageServer, true);
  63.                         tracker_disconnect_server_ex(pTrackerServer, true);
  64.                         response->set_error(-1);
  65.                         return;
  66.                 }
  67.                 response->set_error(0);
  68.                 response->set_uuid(remote_filename);
  69.         }
  70.         // 其他分块
  71.         else
  72.         {
  73.                 // 根据第一个分块返回的file_id,得到组命和文件名
  74.                 sscanf(request->uuid().c_str(), "%[^/]/%s", group_name, remote_filename);

  75.                 // 根据组命和文件名查询原来的storage
  76.                  result = tracker_query_storage_update(pTrackerServer, &storageServer, group_name, remote_filename);
  77.                  if (result != 0)
  78.                  {
  79.                         response->set_error(-1);
  80.                         tracker_disconnect_server_ex(pTrackerServer, true);
  81.                         return;
  82.                 }
  83.                 // 连接storage
  84.                  if ((pStorageServer = tracker_connect_server(&storageServer, &result)) == NULL)
  85.                 {
  86.                         response->set_error(-1);
  87.                         tracker_disconnect_server_ex(pTrackerServer, true);
  88.                         return;
  89.                 }
  90.                 // ------------------------------------------ 问题在此 -------------------------------------
  91.                 // <<<<<<<  通过“storage_modify_by_filebuff1”继续上传其他分块,就是这里返回错误22 >>>>>>>>
  92.                 // ---------------------------------------------------------------------------------------
  93.                 result = storage_modify_by_filebuff1(pTrackerServer, pStorageServer, request->data().c_str(),
  94.                                 request->offset(), request->data().size(), request->uuid().c_str());
  95.                 if (result != 0)
  96.                 {
  97.                         response->set_error(-1);
  98.                         tracker_disconnect_server_ex(pStorageServer, true);
  99.                         tracker_disconnect_server_ex(pTrackerServer, true);
  100.                         return;
  101.                 }

  102.                 response->set_error(0);
  103.         }

  104.         tracker_disconnect_server_ex(pStorageServer, true);
  105.         tracker_disconnect_server_ex(pTrackerServer, true);
  106. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP