我在標題中遇到的這個問題與之前在這里提出的問題非常相似(Azure 存儲:上傳的文件大小為零字節),但它是針對 .NET 的,我的 Java 場景的上下文是我正在上傳小尺寸 CSV文件(每個文件大約少于 5 Kb)。此外,API 代碼使用我正在使用的最新版本的 Azure API,與另一個問題使用的 2010 版本形成對比。我不知道我錯過了哪里,但另一種選擇是在文件存儲中進行,但當然,我的一些同行推薦了 blob 方法。到目前為止,我的代碼主要基于將文件作為 blob 塊上傳到 Azure 示例 git [頁面] 。我已經完成了容器設置和文件重命名步驟,這不是問題,但上傳后,我的 Azure 域上的 blob 存儲容器中的文件大小顯示 0 字節。我嘗試交替將文件轉換為 FileInputStream 并將其作為流上傳,但它仍然以相同的方式產生。fileName=event.getFilename(); //fileName is e.g eod1234.csvString tempdir = System.getProperty("java.io.tmpdir");file= new File(tempdir+File.separator+fileName); //try {? ? PipedOutputStream pos = new PipedOutputStream();? ? stream= new PipedInputStream(pos);? ? buffer = new byte[stream.available()];? ? stream.read(buffer);? ? FileInputStream fils = new FileInputStream(file);? ? int content = 0;? ? while((content = fils.read()) != -1){? ? ? ? System.out.println((char)content);? ? }? ? //Outputstream was written as a test previously but didn't work? ? OutputStream outStream = new FileOutputStream(file);? ? outStream.write(buffer);? ? outStream.close();? ? // container name is "testing1"? ? ? ? ? ??? ? CloudBlockBlob blob = container.getBlockBlobReference(fileName);? ? if(fileName.length() > 0){? ? ? ?blob.upload(fils,file.length()); //this is testing with fileInputStream? ? ? ?blob.uploadFromFile(fileName); //preferred, just upload from file? ? }}? ? ? ? ? ??沒有顯示任何錯誤消息,只是我們知道該文件涉及 blob 存儲并顯示大小為 0 字節。這是一個僅上傳 CSV 格式文件的單向過程。在 blob 容器中,它應該顯示這些上傳的文件,每個文件的大小為 1-5 KB。
3 回答

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
而不是blob.uploadFromFile(fileName);
你應該使用blob.uploadFromFile(file.getAbsolutePath());
因為uploadFromFile
方法需要絕對路徑。而且你不需要blob.upload(fils,file.length());
.

動漫人物
TA貢獻1815條經驗 獲得超10個贊
是由于 Vaadin 中的上傳組件的行為與平常不同 。CloudBlockBlob 或 BlobContainerUrl 方法均有效。
開箱即用的 Upload 組件需要手動將 FileOutputStream 實現為臨時對象,這與隨處可見的常見 servlet 對象不同。由于時間有限,我使用了他們的插件之一 EasyUpload,因為它已將 Viritin UploadFileHandler 合并到其中,而不是從頭開始弄清楚如何流式傳輸對象。如果有更多時間,我肯定會在我的沙盒工作區中試用 MultiFileUpload 插件,它有更多有趣的東西。

慕絲7291255
TA貢獻1859條經驗 獲得超6個贊
我在處理(從多部分文件復制的)文件時遇到了同樣的問題,.png
我正在這樣做:
File file = new File(multipartFile.getOriginalFilename());
Azure 上的 blob 是 0bytes 但是當我改成這個時:
File file = new File("C://uploads//"+multipartFile.getOriginalFilename());
它開始正確保存文件
添加回答
舉報
0/150
提交
取消