我們到底能走多遠系列(22)
扯淡:老規矩,先扯淡,老實說,過年就是回家在親戚面前吹吹牛喝喝酒,再聽聽別人的牛,然後回來繼續苦逼....
所以不是你把別人吹倒,就是別人把你吹倒,大家要加油吹哦!
-----------------------------------------
最近很多人糾結自己文章被別人抄襲的事。
我一直想不明白:自己寫的部落格被人抄襲,甚至當成別人的原創這種情況對自己有多大的傷害?
我不明白:除了自己虛榮心上的一點挫折,其他損失還有多少呢?除了部分惡意的抄襲行為,的確要反對外。
我覺得:一個分享的行為,被放大,被傳播,本來就是一件很nice,很cool的事。
我個人也會轉文章,一般文章署名了,我也會會複製過來,沒寫的我也懶的一個個標記好是從哪裡複製來的了,但是有一點是肯定的,雖然是複製粘貼的幾秒鐘,我是感謝作者的,至少我會傾佩他幾秒,我覺得他教給我一些東西,無形的東西,但卻可能有價值。
為什麼要糾結別人對你文章的複製粘貼呢?
當你把一些思考,總結,經驗貼到自己的部落格後。一個月後在另一個部落格上看到了自己文章,難道這件事反而會讓各位生氣嗎?這在部落格園裡應該是件快樂的事情吧,想想自己文章被人反覆閱讀,並被記錄下來,成為別人思想的一部分,這是多麼有趣的一件事啊!
到了這裡卻被看成是有點罪惡感的事了。
寫部落格正真的收穫的是什嗎?
1,寫的時候自己的思考
2,寫完後自己對自己文章的閱讀重新思考
3,別人看了你的文章的反饋,然後你就可以再進行擴充思考。
整一個過程就是不斷的促使自己思考的過程。只要這個過程還能促使你思考,寫這篇部落格就是有價值的,至少對自己是有的。
所以我個人覺得,還是不要太糾結別人的什麼抄襲這種事,別人抄襲你只能代表別人覺得這篇部落格有幫到他,覺得你不錯,是吧。
主題:
1,下載檔案
檔案躺在伺服器的某個檔案夾下,頁面點擊下載,將檔案儲存到本地的過程:
action用springmvc實現:
public ModelAndView downloadModelForm(HttpServletRequest request, HttpServletResponse response) throws Exception{ response.setContentType("application/octet-stream"); String fileName = "使用者申請表.docx"; String path = request.getSession().getServletContext().getRealPath(BusinessConstants.DOWNLOAD_FILE_PATH + fileName); File file = new File(path); // 清空response response.reset(); if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0){ fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");//firefox瀏覽器 } else{ fileName = URLEncoder.encode(fileName, "UTF-8");//其他瀏覽器包括IE瀏覽器和google瀏覽器 } // 設定response的Header response.addHeader("Content-Disposition", "attachment;filename="+ fileName); response.addHeader("Content-Length", ""+file.length()); try{ //以流的形式下載檔案 InputStream fis = new BufferedInputStream(new FileInputStream(path)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); toClient.write(buffer); toClient.flush(); toClient.close(); }catch(Exception e){ e.printStackTrace(); } return null; }
特別要注意的是代碼是哦那個對fileName 編碼邏輯,根據不同瀏覽器來實現不同的編碼,這樣做是為了在輸出檔案名時可以使用中文名。
測試對firefox,ie8,Google通過,可用。如果不做操作,結果是檔案名稱使用中文的話會出現亂碼問題。(可能這隻是一種解決方案,如果你有更好的解決方式,請告訴我哦)
2,匯出excle檔案:
匯出的是賬單表的內容,資料需要先去資料庫中取的,組裝成excel。
這裡使用最新的pio3.9(開源項目),來完成excel的匯出:
service層的方法:組裝出一個完整內容的HSSFWorkbook
public HSSFWorkbook export(List<Sale> list) { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(BusinessConstants.EXCEL_SHEET_NAME); HSSFRow row = sheet.createRow((int) 0); HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HSSFCellStyle.ALIGN_CENTER); String[] excelHeader = BusinessConstants.EXCEL_HEADER; for (int i = 0; i < excelHeader.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellValue(excelHeader[i]); cell.setCellStyle(style); sheet.autoSizeColumn(i); } SimpleDateFormat sdf = new SimpleDateFormat(BusinessConstants.DATE_FORMAT); for (int i = 0; i < list.size(); i++) { row = sheet.createRow(i + 1); Sale sale = list.get(i); row.createCell(0).setCellValue(sdf.format(sale.getTime())); //setCellValue方法參數不能是null,會導致異常,所以對每一個內容進行必要的檢查 if(sale.getStrType() == null){ row.createCell(1).setCellValue(BusinessConstants.STRIKE); }else{ row.createCell(1).setCellValue(sale.getStrType()); } if(sale.getStrPayType() == null){ row.createCell(2).setCellValue(BusinessConstants.STRIKE); }else{ row.createCell(2).setCellValue(""+sale.getStrPayType()); } if(sale.getAmount() == null){ row.createCell(3).setCellValue(BusinessConstants.STRIKE); }else{ row.createCell(3).setCellValue(sale.getAmount()); } if(sale.getProductNum() == null){ row.createCell(4).setCellValue(BusinessConstants.STRIKE); }else{ row.createCell(4).setCellValue(sale.getProductNum()); } if(sale.getProductValid() == null){ row.createCell(5).setCellValue(BusinessConstants.STRIKE); }else{ row.createCell(5).setCellValue(sale.getProductValid()); } if(sale.getProductName() == null){ row.createCell(6).setCellValue(BusinessConstants.STRIKE); }else{ row.createCell(6).setCellValue(sale.getProductName()); } } return wb; }
action層的代碼:
public ModelAndView downloadBill(HttpServletRequest request, HttpServletResponse response) throws IOException { User user = (User) request.getSession().getAttribute("user"); List<Sale> saleList = accountService.getSale(user.getId(), null, null, 0); HSSFWorkbook wb = accountService.export(saleList); // 清空response response.reset(); String fileName = ""; if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0){ fileName = new String(BusinessConstants.EXCEL_FILE_NAME.getBytes("UTF-8"), "ISO8859-1");//firefox瀏覽器 } else{ fileName = URLEncoder.encode(BusinessConstants.EXCEL_FILE_NAME, "UTF-8");//其他瀏覽器包括IE瀏覽器和google瀏覽器 } response.setContentType("application/vnd.ms-excel");//Office2003 response.setHeader("Content-disposition", "attachment;filename="+fileName); OutputStream ouputStream = response.getOutputStream(); wb.write(ouputStream); ouputStream.flush(); ouputStream.close(); return null; }
同樣的我們需要對fileName進行編碼上的設定,以使可以正常使用中文名。
如果進行操作,效果可能是這樣的:
匯出效果:
以上,希望能幫到你。
各位,新年快樂!
讓我們繼續前行
----------------------------------------------------------------------
努力不一定成功,但不努力肯定不會成功。
共勉。