您的位置:首页 > 大数据 > 人工智能

Failed to reset the input stream com.amazonaws.ResetException: Failed to reset the input stream

2017-12-29 13:54 1061 查看
最近做二期录音上传,负责把各个外包分公司的录音通过FTP服务器拿到文件流,并上传到AmazonS3的云存储中。但在获取到文件流,执行上传时,有的成功,有的失败。在try…catch..的异常信息中拿到的简单信息如下:

Failed to reset the input stream

com.amazonaws.ResetException: Failed to reset the input stream;

If the request involves an input stream, the maximum stream buffer size can be configured via

request.getRequestClientOptions().setReadLimit(int)

具体的报错信息如下:

FYI: failed to reset content inputstream before throwing up |com.amazonaws.http.AmazonHttpClient:1104
java.io.IOException: Resetting to invalid mark
at java.io.BufferedInputStream.reset(BufferedInputStream.java:448)
at com.amazonaws.internal.SdkBufferedInputStream.reset(SdkBufferedInputStream.java:106)
at com.amazonaws.internal.SdkFilterInputStream.reset(SdkFilterInputStream.java:102)
at com.amazonaws.event.ProgressInputStream.reset(ProgressInputStream.java:168)
at com.amazonaws.internal.SdkFilterInputStream.reset(SdkFilterInputStream.java:102)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.lastReset(AmazonHttpClient.java:1100)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1037)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpC
4000
lient.java:742)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:716)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4169)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4116)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1700)
at com.taikang.ts.service.OutsourcingBusinessService.uploadToAmazonS3(OutsourcingBusinessService.java:181)
at com.taikang.ts.service.OutsourcingBusinessService.handelTask(OutsourcingBusinessService.java:100)
at com.taikang.ts.service.OutsourcingBusinessService$$FastClassBySpringCGLIB$$63fe3d27.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:738)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:62)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:673)
at com.taikang.ts.service.OutsourcingBusinessService$$EnhancerBySpringCGLIB$$67e29113.handelTask(<generated>)
at com.taikang.ts.rest.OutsourcingBusinessContoller.handleSXKSRecordUpload(OutsourcingBusinessContoller.java:55)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.execute(MethodExecutionAction.java:116)
at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.executeWithArgs(MethodExecutionAction.java:93)
at com.netflix.hystrix.contrib.javanica.command.MethodExecutionAction.execute(MethodExecutionAction.java:78)
at com.netflix.hystrix.contrib.javanica.command.GenericCommand$1.execute(GenericCommand.java:48)
at com.netflix.hystrix.contrib.javanica.command.AbstractHystrixCommand.process(AbstractHystrixCommand.java:145)
at com.netflix.hystrix.contrib.javanica.command.GenericCommand.run(GenericCommand.java:45)
at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:302)
at com.netflix.hystrix.HystrixCommand$2.call(HystrixCommand.java:298)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10151)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:51)
at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35)
at rx.Observable.unsafeSubscribe(Observable.java:10151)
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.j
12177
ava:41)
at rx.internal.operators.OnSubscribeDoOnEach.call(OnSubscribeDoOnEach.java:30)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48)
at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30)
at rx.Observable.unsafeSubscribe(Observable.java:10151)
at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94)
at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56)
at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47)
at org.springframework.cloud.sleuth.instrument.hystrix.SleuthHystrixConcurrencyStrategy$HystrixTraceCallable.call(SleuthHystrixConcurrencyStrategy.java:188)
at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69)
at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)


报错信息分析:由于注意到上传的录音文件第一次上传的为75.1KB,能够正常上传到云存储,第二次的录音文件大小为2.6MB,然后就出现异常。意识到这估计就是文件超过了限制值导致异常的,就看AmazonS3的报错提示用:request.getRequestClientOptions().setReadLimit(int)来设置一下一次请求存放的文件大小的。一开始我没有设置,估计默认值不大,不满足第二次上传2.6MB的文件。所以要明确给出文件大小限制阈值。这里的int值的换算如下:

putRequest.getRequestClientOptions.setReadLimit(n), where n=100000 (100kb), and 800000000 (800mb)
。所以由于录音文件最大为将近50MB,我就设置为
request.getRequestClientOptions().setReadLimit(50000000)
.然后在执行上传就没问题了。

下面是上传部分代码,供参考:

private void uploadToAmazonS3(RecordInfoBo rb,AmazonS3 conn,FTPClient ftpClient){
//为每个上传的录音设置一些文件夹属性
ObjectMetadata metadata=new ObjectMetadata();
metadata.addUserMetadata("salemanagecom",rb.getSalemanagecom());
metadata.addUserMetadata("managecom",rb.getManagecom());
//拿到录音上传的云储存路径
String key=rb.getRecordAwsPath();
//拿到录音在FTP服务器上的全路径
String pathName=rb.getRecordDiscPath();
try{
//从封装的工具类,拿到对应ftp路径下录音文件流
InputStream in=FTPUtil.getInputStreamFropFtp(pathName,ftpClient);
if(in == null){
log.info("---根据ftp文件路径获取文件流为空!---")
}else{
PutObjectRequest request =new PutObjectRequest(awsConfig.getBucket_name(),key,in,metadata);
request.getRequestClientOptions().setReadLimit(50000000);//设置大小接近50MB.
conn.putObject(request);
}
}catch(Exception e){
log.error("--------上传录音出现异常,异常信息如下-----",e.getMessage);
}

}


参考文档: Failed to reset the input stream
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐