您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關(guān)java文件流的處理方式是什么,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
public void download(HttpServletResponse response){ String filePath ="";//文件路徑 String fileName ="";//文件名稱 // 讀到流中 InputStream inStream = new FileInputStream(filePath); // 設(shè)置輸出的格式 response.reset(); response.setContentType("bin"); response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); IOUtils.copy(inStream, response.getOutputStream()); }
方式一:
new URL(fileUrl + item.getcBhFileserver()).openStream()
方法二:
public Boolean addFile(String url, String id, String fileName) { RequestCallback requestCallBack = new RequestCallback() { @Override public void doWithRequest(ClientHttpRequest request) throws IOException { request.getHeaders().add("accept", MediaType.APPLICATION_OCTET_STREAM_VALUE); } }; ResponseExtractor<Boolean> responseExtractor = new ResponseExtractor<Boolean>() { @Override public Boolean extractData(ClientHttpResponse response) throws IOException { if (response.getStatusCode() == HttpStatus.OK) { //得到文件流 InputStream input = response.getBody(); return true; } return false; } }; return restTemplate.execute(url, HttpMethod.GET, requestCallBack, responseExtractor, id); }
public void zipFilesAll() throws Exception { String zipPath = "";//zip包路徑 String zipFileName = "";//zip包名稱 File zipFile = new File(zipFileName .toString()); // 創(chuàng)建 FileOutputStream 對象 FileOutputStream fileOutputStream = null; // 創(chuàng)建 ZipOutputStream ZipOutputStream zipOutputStream = null; try { //創(chuàng)建文件夾 zipFile = new File(zipPath ); FileUtils.forceMkdir(zipFile); //創(chuàng)建文件 zipFile = new File(zipFileName .toString()); if (!zipFile.exists()) { zipFile.createNewFile(); } // 實例化 FileOutputStream 對象 fileOutputStream = new FileOutputStream(zipFileName.toString()); // 實例化 ZipOutputStream 對象 zipOutputStream = new ZipOutputStream(fileOutputStream); // 創(chuàng)建 ZipEntry 對象 ZipEntry zipEntry = null; for (CL cl: ClList) { // 實例化 ZipEntry 對象,源文件數(shù)組中的當前文件 zipEntry = new ZipEntry(tCltjjl.getcClmc() + ".zip"); zipOutputStream.putNextEntry(zipEntry); IOUtils.copy(new FileInputStream(cl.getcPath(), zipOutputStream); } } catch (Exception e) { }finally{ //記得刪除文件 } }
項目pom文件添加二維碼操作,和文件打包的maven支持:
<!--二維碼相關(guān) start--> <dependency> <groupId>net.glxn.qrgen</groupId> <artifactId>javase</artifactId> <version>2.0</version> </dependency> <!--二維碼相關(guān) end--> <!--文件打包相關(guān) start--> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-compress</artifactId> <version>1.12</version> </dependency> <!--文件打包相關(guān) end-->
前臺代碼:
<button type="button" onclick="downloadzip()">下載</button>
js(我用了thymeleaf模板)代碼:
<script th:inline="javascript"> function downloadzip(){ var storeType = $("#storeType").val(); if(storeType ==""){ bootAlertError("請選擇門店!"); return; } var url = [[@{/downLoadProductQrCode/getStreamZip}]]; //模擬form表單 返回打包流 var form = $('<form method= "POST" action="'+ url +'" enctyped="multipart/form-data">'+ '<input name= "agencyId" type= "hidden" value="'+storeType+'" />' +'</form>'); form. appendTo('body'). submit(). remove(); } </script>
后臺代碼:
/** * @Author Ni Klaus * @Description //TODO 門店總代生成打包產(chǎn)品二維碼zip * @Date 上午 10:38 2019/8/20 0020 * @Param [params,response] * @return void **/ @RequestMapping({"getStreamZip"}) @ResponseBody public void findList(@RequestParam Map params,HttpServletResponse response) throws Exception { String agencyId = (String) params.get("agencyId"); AgencyAccount agencyAccount = agencyAccountService.getAccountByAgencyId(agencyId); //這里設(shè)置打包后的zip文件名 String downloadName = agencyAccount.getName()+".zip"; try{ response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName=" + new String(downloadName.getBytes(),"ISO8859-1")); }catch(UnsupportedEncodingException e){ log.error("----------下載文件名編碼時出現(xiàn)錯誤------"+e.getMessage()); } OutputStream outputStream = response.getOutputStream(); ZipArchiveOutputStream zous = new ZipArchiveOutputStream(outputStream); zous.setUseZip64(Zip64Mode.AsNeeded); zous.setEncoding("utf-8"); try{ //我這里是通過不同產(chǎn)品類型生成不同產(chǎn)品的二維碼圖片流 //具體你想生成什么類型的多個文件打包,只需要循環(huán)創(chuàng)建ArchiveEntry 然后zous.putArchiveEntry(entry)就可以了 StoreProductType[] storeProductTypes = StoreProductType.values(); for (StoreProductType storeProductType : storeProductTypes) { String url = "http://m.xxx.cn/goods/pay/xxx.html?productid="+storeProductType.getProductId() + "&agencycode="+ agencyId +"&channelid=def&appfrom=sqjk&isstore=1"; //打包文件里的每個文件的名字 String imgName = storeProductType.getDescription()+".png"; ByteArrayOutputStream out = QRCode.from(url).to(ImageType.PNG).withSize(300,300).stream(); byte[] bytes = out.toByteArray(); ArchiveEntry entry = new ZipArchiveEntry(imgName); zous.putArchiveEntry(entry); zous.write(bytes); zous.closeArchiveEntry(); if (out != null) { out.close(); } } }catch (Exception e){ e.printStackTrace(); log.error("---------------門店總代生成二維碼打包流出錯----------------"+e.getMessage()); }finally{ if(outputStream != null){ outputStream.close(); } if(zous != null){ zous.close(); } } }
最后效果:
關(guān)于“java文件流的處理方式是什么”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。