有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Jet3T zipfile上传,流自动关闭

我正在通过一个多部分网络表单上传一个压缩文件。我正在使用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
}

似乎是s3。putObject bucket,s3Obj方法正在关闭我的流,因为我得到了streamClosed异常。我需要从zipfile获得Nextery,因此流不应该被关闭

我已经尝试将byteArrayinputstream与zis一起使用。getBytes()但即使是getBytes()也会关闭流

我有什么选择

谢谢


共 (0) 个答案