我已經完成了容器設置和文件重命名步驟,這不是問題,但上傳后,我 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 回答

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

HUH函數
TA貢獻1836條經驗 獲得超4個贊
我在處理(從多部分文件復制的)文件時遇到了同樣的問題,.png
我正在這樣做:
File file = new File(multipartFile.getOriginalFilename());
Azure 上的 blob 是 0bytes 但是當我改成這個時:
File file = new File("C://uploads//"+multipartFile.getOriginalFilename());
它開始正確保存文件

慕尼黑的夜晚無繁華
TA貢獻1864條經驗 獲得超6個贊
CloudBlockBlob 或 BlobContainerUrl 方法都有效。
開箱即用的上傳組件需要手動將 FileOutputStream 實現為一個臨時對象,這與隨處可見的普通 servlet 對象不同。由于時間有限,我使用了他們的一個插件 EasyUpload,因為它集成了 Viritin UploadFileHandler 而不是弄清楚如何從頭開始流式傳輸對象。如果有更多時間,我肯定會在我的沙盒工作區中試用 MultiFileUpload 插件,它有更多有趣的東西。
添加回答
舉報
0/150
提交
取消