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)
具体的报错信息如下:
报错信息分析:由于注意到上传的录音文件第一次上传的为75.1KB,能够正常上传到云存储,第二次的录音文件大小为2.6MB,然后就出现异常。意识到这估计就是文件超过了限制值导致异常的,就看AmazonS3的报错提示用:request.getRequestClientOptions().setReadLimit(int)来设置一下一次请求存放的文件大小的。一开始我没有设置,估计默认值不大,不满足第二次上传2.6MB的文件。所以要明确给出文件大小限制阈值。这里的int值的换算如下:
下面是上传部分代码,供参考:
参考文档: Failed to reset the input stream
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
相关文章推荐
- dubbo:com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method 解决
- com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method
- com.amazonaws.SdkClientException: Unable to execute HTTP request
- com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method 错误处理
- com.amazonaws.AmazonClientException: Unable to calculate MD5 hash: /usr/local/src/...6_13c67eef385__7ffd_00000014.tmp (没有那个文件或目录)
- 关于dubbo调度时出现Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method insertTestTb in the service cn.cuibusi.core.service.TestTbService.的解决办法
- android.os.NetworkOnMainThreadException,Failed to find provider info for com.android.inputmethod.lat
- NoHttpResponseException: The server corporbank.dccnet.com failed to respond
- com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method findUserByUserNo in the service wusc.edu.facade.user.service.PmsUserFacade.
- org.jetbrains.android.uipreview.RenderingException: Failed to load the LayoutLib: com/android/layoutlib/bridge/Bridge : Unsupported major.minor version 52.0
- com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method 错误处理
- error: failed to push some refs to 'git@github.com:....." Updates were rejected because the remote c
- org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.eng
- jenkins 启动slave,出现com.sun.deploy.net.FailedDownloadException: Unable to load resource: http://127.0.0.1:8080/jnlpJars/remoting.jar
- 严重: A web application registered the JBDC driver [com.alibaba.druid.mock.MockDriver] but failed to u
- java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start com
- 【问题及解决】Elasticsearch--Failed to deserialize exception response from stream
- com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed J
- Attempt to reset the display driver and recover from timeout failed
- org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.jav