マルチパートWebフォームを介してzipファイルをアップロードしています。アップロードにgroovyとgrailsを使用していますが、コードはJava(Spring付き)でも同様に見えます...
def processUpload(){
def uploadedFile = request.getFile('payload')
String vloc = "";
String filename = ""
if(!uploadedFile.empty){
InputStream is = uploadedFile.getInputStream()
java.util.zip.ZipInputStream zis = new java.util.zip.ZipInputStream(is)
def zipentry = zis.getNextEntry();
while(zipentry!=null){
println zipentry.getName()
if( zipentry.getName().indexOf(".")>0){
amazonS3Service.put (zis, zipentry.getName(), session.uid, ".zyx", zipentry.getSize())
}
zipentry = zis.getNextEntry()
}
}
}
amazonS3Service.put
次はどこですか
String put(inputstream, name, uid, ext, length)
{
String mime = mimeExtensionMap[ext.toLowerCase()]
S3Bucket bucket = makeBucket(uid)
S3Object s3Obj = new S3Object()
s3Obj.setAcl AccessControlList.REST_CANNED_PRIVATE
s3Obj.setContentLength length
s3Obj.setContentType mime
s3Obj.setDataInputStream inputstream
s3Obj.setKey name
s3Obj.setBucketName bucket.getName()
s3.putObject bucket, s3Obj
return name
}
streamClosed例外が発生しているため、s3.putObjectバケット、s3Objメソッドがストリームを閉じているようです。zipファイルからnextentryを取得する必要があるため、ストリームを閉じないでください。
zis.getBytes()でbyteArrayinputstreamを使用しようとしましたが、getBytes()でさえストリームを閉じます!!
私のオプションは何ですか?
ありがとう