您好,登錄后才能下訂單哦!
本篇內容主要講解“怎么使用ByteArrayOutputStream下載文件”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么使用ByteArrayOutputStream下載文件”吧!
//文件名稱 String filepath = ServletActionContext.getServletContext() .getRealPath(farmerQrCode.getQrCodeUrl()); File file = new File(filepath); String fileName = new Date().getTime()+".png"; //設置請求信息 HttpServletResponse response = ServletActionContext.getResponse(); response.setContentType(response.getContentType()); response.setHeader("Content-disposition", "attachment; filename="+fileName); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int len = 0; FileInputStream inputStream = new FileInputStream(file); byte [] buffer = new byte[3]; while((len = inputStream.read(buffer)) != -1) { baos.write(buffer, 0, len); } byte[] bytes = baos.toByteArray(); response.setHeader("Content-Length", String.valueOf(bytes.length)); BufferedOutputStream bos = null; bos = new BufferedOutputStream(response.getOutputStream()); bos.write(bytes); bos.close(); baos.close();
//此處將HSSFWorkbook wb處理好,然后最后要導出文件時加上此代碼。 ByteArrayOutputStream baos = new ByteArrayOutputStream(); response.setContentType(response.getContentType()); response.setHeader("Content-disposition", "attachment; filename=monthPayment.xls"); wb.write(baos); byte[] bytes = baos.toByteArray(); response.setHeader("Content-Length", String.valueOf(bytes.length)); BufferedOutputStream bos = null; bos = new BufferedOutputStream(response.getOutputStream()); bos.write(bytes); bos.close(); baos.close();
1、使用inputStream.read(buffer)方法分段的把txt文本中的內容寫入buffer數組。
這里為buffer數組指定了長度為3,所以“hello world!”這組長度為11的數據會被分成4次寫入到buffer數組中。
當inputStream.read(buffer)把數據都寫入到buffer數組之后,它最后還會返回一次len為-1的值,代表數據完全讀完。
2、使用outStream.write(buffer, 0, len)方法,在while循環體內把每次寫入到buffer數組的值再次疊加寫入到內存緩沖區中。
3、使用outStream.toByteArray()方法把內存緩沖區中的數據流轉換成字節數組。
4、最后把字符數組轉換成字符串進行返回return new String(data)。
今天在用s3接口做ceph儲存的時候,要實現一個io下載的接口。
需要把InputStream轉成byte[],一開始,是的寫法是這樣的:
byte[] buf = new byte[(int) fileSize]; InputStream in = ossObject.getObjectContent(); try { for (int n = 0; n != -1; ) { n = in.read(buf, 0, buf.length); } } catch (IOException e) { log.error(e.getMessage()); } finally { try { in.close(); } catch (IOException e) { log.error(e.getMessage()); } }
可是下載的文件稍大一些,就會出現亂碼。
于是換了網上推薦的,使用byte緩存的方法,來實現InputStream轉成byte[]:
private static byte[] inputToByte(InputStream inStream, int fileSize) throws IOException { ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); byte[] buff = new byte[fileSize]; int rc; while ((rc = inStream.read(buff, 0, fileSize)) > 0) { swapStream.write(buff, 0, rc); } return swapStream.toByteArray(); }
亂碼的情況就解決了!
到此,相信大家對“怎么使用ByteArrayOutputStream下載文件”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。