2013-02-02 59 views
1

我正在使用xdocreport生成WORD文件的報告。使用轉換標誌插入操作TRUE失敗

從所生成的報告中,我創建InputStreamContent與MIME-TYPE "application/vnd.openxmlformats-officedocument.wordprocessingml.document"(MS WORD - DOCX)寫入到谷歌驅動器:

// create Word file stream using xdocreport 
OutputStream2InputStream outputStream = new OutputStream2InputStream(); // buffer 
report.process(context, outputStream); 
// create inputstream for Google Drive 
InputStreamContent inputStream = new InputStreamContent("application/vnd.openxmlformats-officedocument.wordprocessingml.document", 
     outputStream.getInputStream()); 
inputStream.setLength(outputStream.size()); 

寫入數據MSWORD DOCUMENT工作正常(CONVERT = FALSE):

File file = new File(); 
Insert insertOperation = service.files().insert(file, inputStream).setConvert(false); 
file.setTitle("test.docx"); 
file.setMimeType(inputstream.getType()); 
File result = insertOperation.execute(); 

產生在我的Google雲端硬盤上創建的WORD DOCX文件。

寫入數據SAME的InputStream WITH CONVERT = TRUE失敗

File file = new File(); 
Insert insertOperation = service.files().insert(file, inputStream).setConvert(true); 
file.setTitle("test"); 
//file.setMimeType(inputstream.getType()); // what here ? 
File result = insertOperation.execute(); 

RESULT

1.當沒有設置mime類型:新創建的文件具有result0字節MIME類型:application/vnd.google-apps.kix

2.將mime類型設置爲 MIME-TYPE設置爲「application/vnd.google-apps.document」並且convert = true時,結果爲400:BAD REQUEST。

我在做什麼錯?

回答

1

這是一個常見問題。請勿在請求元數據中設置MIME類型。 Google雲端硬盤將決定要轉換爲的MIME類型。

您的標記爲// what here ?的行應該被忽略。

+0

當我不在Insert實例上設置MIME類型時,生成的文件有0個字節,MIME類型爲application/vnd.google-apps.kix。或者我必須在InputStreamContent上放棄它? – koma

+0

在InputStreamContent上,您應該使用文件的實際MIME類型。你不應該傳遞「kix」MIME類型。 –

+0

AFAICS,我會盡你所能解釋...但結果在0字節文件 - 相同的InputStreamContent工作正常,沒有轉換。我害怕,我需要深入一點。 – koma

0

所有你需要做的就是用正確的.docx MIME類型更新你的getType()。

docx=> application/vnd.openxmlformats-officedocument.wordprocessingml.document 

我有同樣的問題,這段代碼修復了它!