2014-06-07 47 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) –

相關問題