檔案下載-excel匯出-我們到底能走多遠系列(22)

來源:互聯網
上載者:User
我們到底能走多遠系列(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進行編碼上的設定,以使可以正常使用中文名。

如果進行操作,效果可能是這樣的:

 

匯出效果:

 

以上,希望能幫到你。

 

各位,新年快樂!

 

讓我們繼續前行

----------------------------------------------------------------------

努力不一定成功,但不努力肯定不會成功。
共勉。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.