2014-06-07 35 views
0
public void drop(DragAndDropEvent dropEvent) { 

     WrapperTransferable tr = (WrapperTransferable) dropEvent.getTransferable(); 
     Html5File[] files = tr.getFiles(); 
     if (files != null) { 
      for (final Html5File html5File : files) { 
       final String fileName = html5File.getFileName(); 

       final ByteArrayOutputStream bas = new ByteArrayOutputStream(); 
       StreamVariable streamVariable = new StreamVariable() { 

         public OutputStream getOutputStream() { 
          return bas; 
         } 
         public boolean listenProgress() { 
          return false; 
         } 
         public void onProgress(StreamingProgressEvent event) { 
         } 
         public void streamingStarted(
           StreamingStartEvent event) { 
         } 
         public void streamingFinished(
           StreamingEndEvent event) { 
          progress.setVisible(false); 
          showFile(fileName, html5File.getType(), bas); 
         } 
         public void streamingFailed(
           StreamingErrorEvent event) { 
          progress.setVisible(false); 
         } 
         public boolean isInterrupted() { 
          return false; 
         } 
        }; 
        html5File.setStreamVariable(streamVariable); 
        progress.setVisible(true); 


        encryptAndUploadFile(***html5File****, fileName, folderName); 

//我怎么能这样html5File转换成java.io.File,因为我有一个接受文件参数如何在vaadin中将Html5File转换为java.io.File?

   } 
      } 
    } 

// encryptAndUploadFile()方法

public void encryptAndUploadFile(File file, String fileName,String folderName) 
    { 
    String m_strWebFilePath = finalSourcepath + fileName; 
    File m_objFile=null; 
    byte[] sourceFileByte = Encryption.aesEncrypt(com.saterisystems.common.utils.FileUtils.getImageIntoByteArray(file), GlobalConstants.KEY.getBytes(), GlobalConstants.IV.getBytes()); 
    ...... 
    ...... 
    ...... 

请一个encryptAndUploadFile方法建议我如何将此Html5File类型对象转换为java.io.File类型对象?

回答

0

编辑: 我再次阅读他们的文档和演示代码。看起来,用Vaadin拖放文件时,实际上传是由它处理的。真正的问题是你想要在它们进入服务器之前加密它们(从你想要调用的方法)。

我想我已经想出了一种上传加密方式。看看这里http://demo.vaadin.com/sampler/#ui/data-input/other/drop-items此代码演示:

if (files != null) { 
    for (final Html5File html5File : files) { 
     final String fileName = html5File.getFileName(); 

     if (html5File.getFileSize() > FILE_SIZE_LIMIT) { 
      Notification 
       .show("File rejected. Max 2Mb files are accepted by Sampler", 
              Notification.Type.WARNING_MESSAGE); 
     } else { 

      final ByteArrayOutputStream bas = new ByteArrayOutputStream(); 
      final StreamVariable streamVariable = new StreamVariable() { 

       @Override 
       public OutputStream getOutputStream() { 
         return bas; 
       } 

       @Override 
       public boolean listenProgress() { 
         return false; 
       } 

       @Override 
       public void onProgress(
         final StreamingProgressEvent event) { 
       } 

       @Override 
       public void streamingStarted(
         final StreamingStartEvent event) { 
       } 

       @Override 
       public void streamingFinished(
         final StreamingEndEvent event) { 
         progress.setVisible(false); 
         showFile(fileName, html5File.getType(), bas); 
       } 

       @Override 
       public void streamingFailed(
         final StreamingErrorEvent event) { 
         progress.setVisible(false); 
       } 

       @Override 
       public boolean isInterrupted() { 
         return false; 
       } 
      }; 
      html5File.setStreamVariable(streamVariable); 
      progress.setVisible(true); 
     } 
    } 

} else { 
    final String text = tr.getText(); 
    if (text != null) { 
     showText(text); 
    } 
} 

现在看来,这需要你提供的数据发送到服务器的OutputStream。你可以继承的ByteArrayOutputStream类和重写写入(字节[] b)方法将数据它获取这样的超写方法之前加密:

public class EncryptedArrayOutputStream extends ByteArrayOutputStream { 

@Override 
public void write(byte[] b) throws IOException{ 
    byte[] encrypted = encrypt(b); 
    super.write(encrypted); 

} 

private byte[] encrypt(byte[] bytes) { 

    byte[] encrypted = new byte[bytes.length]; // This also might not be the size depending on the algorithm you choose 
    // Your algorithm here.... 
    return encrypted; 
} 
} 
+0

html5File.getFileName()仅给出文件名不是整个文件路径。所以虽然这个陈述** File file = new File(html5File.getFileName())**抛出异常。 –

+0

Html5File仅支持(Name,FileSize,Type) –

相关问题