描述:在调用同一个接口,并发上传文件的时候出现异常。
java.io.IOException: recv cmd: 0 is not correct, expect cmd: 100
at org.csource.fastdfs.ProtoCommon.recvHeader(ProtoCommon.java:173)
at org.csource.fastdfs.ProtoCommon.recvPackage(ProtoCommon.java:201)
at org.csource.fastdfs.StorageClient.do_upload_file(StorageClient.java:714)
at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:162)
at org.csource.fastdfs.StorageClient.upload_file(StorageClient.java:180)
at org.csource.fastdfs.StorageClient1.upload_file1(StorageClient1.java:103)
at com.xxx.school.util.FastDFSUtils.uploadFile(FastDFSUtils.java:113)
at com.xxx.school.file.service.impl.FileServiceImpl.createOneFile(FileServiceImpl.java:100)
at com.xxx.school.resource.controller.ResourceFileBockUpload.fileBockUpload(ResourceFileBockUpload.java:116)
at sun.reflect.GeneratedMethodAccessor232.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)
原因: 有一个FastDFSUtil类,里面的trackerServer,storageServer,StorageClient1成员是共享的。
TrackerServer trackerServer = trackerClient.getConnection();
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
解决方案:每次调用上传接口的时候重新获取下新连接
TrackerServer trackerServer = trackerClient.getConnection();
if (null == trackerServer) {
return null;
}
StorageServer storageServer = trackerClient.getStoreStorage(trackerServer);
if (null == storageServer) {
return null;
}
StorageClient1 storageClient1 = new StorageClient1(trackerServer, storageServer);
if (storageClient1 == null){
return null;
}
String upload_file1 = storageClient1.upload_file1(buff, fileName.substring(fileName.lastIndexOf(".") + 1),
nameValuePairs);