Amazon s3对象Excel按流不工作(java)
您好,我正在使用amazon s3 sdk for java,我正在尝试上载动态创建的excel。如果我能够使用以下方法在本地计算机上保存文件,会发生什么情况:Amazon s3对象Excel按流不工作(java),java,excel,amazon-web-services,amazon-s3,Java,Excel,Amazon Web Services,Amazon S3,您好,我正在使用amazon s3 sdk for java,我正在尝试上载动态创建的excel。如果我能够使用以下方法在本地计算机上保存文件,会发生什么情况: //creating local file try { FileOutputStream fileOut = new FileOutputStream(new File("C:\\test.xls")); excelWorkBook.write(fileOut); fileOut.
//creating local file
try {
FileOutputStream fileOut = new FileOutputStream(new File("C:\\test.xls"));
excelWorkBook.write(fileOut);
fileOut.flush();
fileOut.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但是当我试图通过流在AmazonS3上上传时,什么也没有发生,我得到了如下错误字符串
com.amazonaws.services.s3.model.AmazonS3Exception: Status Code: 400, AWS Service: Amazon S3, AWS Request ID: BC86F8AED980C7A3, AWS Error Code: RequestTimeout, AWS Error Message: Your socket connection to the server was not read from or written to within the timeout period. Idle connections will be closed., S3 Extended Request ID: P1yiux9HeVH92ifelvhMfTyQ27Hgu3sC4xx8DXstO+HLizMera2OkYv3BSVCEJtxtFz10/SRbMk=
at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:767)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:414)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:228)
at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3316)
at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1336)
at com.sterling.smartdata.service.upload.impl.UploadReportImpl.uploadToCloud(UploadReportImpl.java:96)
at com.sterling.smartdata.service.upload.impl.UploadCloudLocalImplTest.testUpload(UploadCloudLocalImplTest.java:33)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74)
at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:85)
at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:86)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:241)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:87)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:180)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
我被困在过去两天,我试图寻找解决方案,但我没有找到一个
代码:
更改以下两行:-
byte[] bf=new byte[byteArrayOutputStream.toByteArray().length];
ByteArrayInputStream bi=new ByteArrayInputStream(bf);
到
如何创建文件并不重要。我想说的是,只需剪切所有部分,将excel文件作为FileInputStream而不是
bi
读取,然后将其传递给PutObjectRequest
。这是为了查找服务或防火墙的任何问题或其他问题。@bhantol我在PutObjectRequest中尝试了file object而不是stream。。它可以工作。。因此没有防火墙问题。请参阅。。我不想在上载前将文件存储在本地。这就是我使用ByteArrayInputStream()的原因.检查防火墙..我猜您的ByteArrayInputStream
是空的,没有写入任何内容。尝试用代码格式回答-您可以尝试post@Andremoniy当我尝试ro upload file对象而不是stream时,它会起作用。因此它不可能是防火墙问题。您确定已删除尝试{bi.read(byteArrayOutputStream.toByteArray());}catch(IOE异常){//TODO自动生成的捕获块e.printStackTrace();}
byte[] bf=new byte[byteArrayOutputStream.toByteArray().length];
ByteArrayInputStream bi=new ByteArrayInputStream(bf);
ByteArrayInputStream bi= ByteArrayInputStream(byteArrayOutputStream.toByteArray());