- 论坛徽章:
- 0
|
本帖最后由 曾昭强 于 2015-05-18 14:12 编辑
在使用FastDFS API“storage_modify_by_filebuff1”上传文件时,返回错误22,即无效的参数。现将部分代码贴出来,请各位大侠帮忙指正?另外: FastDFS版本是5.05- void FileServiceFastDfs::AsyncWriteFile(::google::protobuf::RpcController* controller,
- const ::FileChunk* request,
- ::WriteResponse* response,
- ::google::protobuf::Closure* done)
- {
- ConnectionInfo *pTrackerServer;
- ConnectionInfo *pStorageServer;
- ConnectionInfo storageServer;
- ConnectionInfo trackerServer;
- int result;
- char group_name[FDFS_GROUP_NAME_MAX_LEN + 1];
- char remote_filename[256];
- FDFSMetaData meta_list[32];
- int meta_count;
- char file_id[128];
- int store_path_index;
- FDFSFileInfo file_info;
- const char *file_ext_name;
- pTrackerServer = tracker_get_connection_r(&trackerServer, &result);
- if (pTrackerServer == NULL)
- {
- response->set_error(-1);
- return;
- }
- // 第一个分块(上传没有问题,成功返回file_id)
- if (request->offset() == 0)
- {
- *group_name = '\0';
- store_path_index = 0;
- if ((result = tracker_query_storage_store(pTrackerServer, &storageServer, group_name, &store_path_index)) != 0)
- {
- printf("tracker_query_storage fail, " \
- "error no: %d, error info: %s\n", \
- result, STRERROR(result));
- response->set_error(-1);
- tracker_disconnect_server_ex(pTrackerServer, true);
- return;
- }
- if ((pStorageServer = tracker_connect_server(&storageServer, &result)) == NULL)
- {
- response->set_error(-1);
- tracker_disconnect_server_ex(pTrackerServer, true);
- return;
- }
- file_ext_name = fdfs_get_file_ext_name(request->uuid().c_str());
- memset(&meta_list, 0, sizeof(meta_list));
- meta_count = 0;
- if (file_ext_name)
- {
- strcpy(meta_list[meta_count].name, "ext_name");
- strcpy(meta_list[meta_count].value, file_ext_name);
- meta_count++;
- }
- result = storage_upload_appender_by_filebuff1(
- pTrackerServer, pStorageServer,
- store_path_index, request->data().c_str(),
- request->data_size(), file_ext_name,
- meta_list, meta_count,
- group_name, file_id);
- if (result != 0)
- {
- tracker_disconnect_server_ex(pStorageServer, true);
- tracker_disconnect_server_ex(pTrackerServer, true);
- response->set_error(-1);
- return;
- }
- response->set_error(0);
- response->set_uuid(remote_filename);
- }
- // 其他分块
- else
- {
- // 根据第一个分块返回的file_id,得到组命和文件名
- sscanf(request->uuid().c_str(), "%[^/]/%s", group_name, remote_filename);
- // 根据组命和文件名查询原来的storage
- result = tracker_query_storage_update(pTrackerServer, &storageServer, group_name, remote_filename);
- if (result != 0)
- {
- response->set_error(-1);
- tracker_disconnect_server_ex(pTrackerServer, true);
- return;
- }
- // 连接storage
- if ((pStorageServer = tracker_connect_server(&storageServer, &result)) == NULL)
- {
- response->set_error(-1);
- tracker_disconnect_server_ex(pTrackerServer, true);
- return;
- }
- // ------------------------------------------ 问题在此 -------------------------------------
- // <<<<<<< 通过“storage_modify_by_filebuff1”继续上传其他分块,就是这里返回错误22 >>>>>>>>
- // ---------------------------------------------------------------------------------------
- result = storage_modify_by_filebuff1(pTrackerServer, pStorageServer, request->data().c_str(),
- request->offset(), request->data().size(), request->uuid().c_str());
- if (result != 0)
- {
- response->set_error(-1);
- tracker_disconnect_server_ex(pStorageServer, true);
- tracker_disconnect_server_ex(pTrackerServer, true);
- return;
- }
- response->set_error(0);
- }
- tracker_disconnect_server_ex(pStorageServer, true);
- tracker_disconnect_server_ex(pTrackerServer, true);
- }
复制代码 |
|