最近做项目的时候遇到了这样一个问题,微信内置的浏览器把下载这个功能屏蔽了。唉,,,折腾了一天,从网上各种找资料,但是给的解决方案都不是我想要的(也不知道谁复制的谁的,基本都一样)。

在快下班的时候,我请教了一位朋友,我问他是怎么解决的,他说:很简单,发邮件就可以了。

为方便大家开发,下面附上代码。此代码包括发送邮件和生成表格。


import java.io.ByteArrayInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.util.Properties;import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.util.ByteArrayDataSource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.tomcat.util.http.fileupload.ByteArrayOutputStream;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;import com.sun.mail.util.MailSSLSocketFactory;import net.sf.json.JSONArray;
import net.sf.json.JSONObject;@Controller
public class SendMailUtil {/** 发送邮件到指定邮箱*/@SuppressWarnings("deprecation")public static void send(HttpServletRequest request,@RequestParam(value = "emails", required = true) String emails,@RequestParam(value = "contents", required = true) String contents,@RequestParam(value = "mores", required = true) String mores,HttpServletResponse resp) throws Exception{//     // 未填写邮箱地址的供货商列表
//        List<String> vendorsList = new ArrayList<String>();String path = request.getRealPath("WEB-INF/excel/aaa.xls");ByteArrayOutputStream byteOS = new ByteArrayOutputStream(); @SuppressWarnings("resource")FileInputStream fis = new FileInputStream(path);  byte[] by = new byte[512];  int t = fis.read(by,0,by.length); while(t>0){   byteOS.write(by, 0, 512);  //这里别写成t,写够512,呵呵,SB的方法对付SB的java APIt = fis.read(by,0,by.length);  } byteOS.close();  InputStream byteIS = new ByteArrayInputStream(byteOS.toByteArray());  HSSFWorkbook workBook = new HSSFWorkbook(byteIS);// 获取第一个sheet页HSSFSheet sheet=workBook.getSheetAt(0);/******************************设置表头*****************************/String sheetTitle = contents+"--进出库详情";// 单元格合并      // 四个参数分别是:起始行,起始列,结束行,结束列      sheet.addMergedRegion(new CellRangeAddress(0,1,0,4)); // 创建表头并赋值HSSFRow rowTitle = sheet.createRow(0); HSSFCell cellTitle = rowTitle.createCell(0);cellTitle.setCellValue(sheetTitle);  // 创建剧中样式HSSFCellStyle cellStyle = workBook.createCellStyle();// 垂直居中cellStyle.setAlignment(HSSFCellStyle.VERTICAL_CENTER);// 水平居中cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 创建字体HSSFFont cellFont = workBook.createFont();cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);cellFont.setFontHeight((short) 300);cellStyle.setFont(cellFont);cellTitle.setCellStyle(cellStyle);/**********************遍历物料,并将物料列表显示到模板中,作为邮件的附件***********************/JSONArray jsonss=JSONArray.fromObject(mores);// 行号下标,从0开始int rowIndex = 2 ;for(int j=0;j<jsonss.size();j++){rowIndex++;// 创建行HSSFRow row=sheet.createRow(rowIndex);// 根据下标创建单元格// 设置物料序号row.createCell(0).setCellValue(j+1);// 设置IMPA编码if(null !=  jsonss.getJSONObject(j).getString("sname")){row.createCell(1).setCellValue(jsonss.getJSONObject(j).getString("sname"));}else {row.createCell(1).setCellValue("");}// 设置物料中文名称if(null != jsonss.getJSONObject(j).getString("conts")){row.createCell(2).setCellValue(jsonss.getJSONObject(j).getString("conts"));}else {row.createCell(2).setCellValue("");}// 设置物料英文名称if(null != jsonss.getJSONObject(j).getString("iconts")){row.createCell(3).setCellValue(jsonss.getJSONObject(j).getString("iconts"));}else {row.createCell(3).setCellValue("");}}ByteArrayOutputStream baos = new ByteArrayOutputStream();workBook.write(baos);baos.flush();byte[] bt = baos.toByteArray();InputStream is = new ByteArrayInputStream(bt, 0, bt.length);baos.close();boolean s = sendMail(sheetTitle, emails, "aa" , is);System.out.println(s+"00000");JSONObject Json = new JSONObject();JSONArray JsonArray = new JSONArray();if(s) {Json.put("status", "1");Json.put("data", s);Json.put("contents", "导出成功");}else {Json.put("status", "0");Json.put("data", s);Json.put("contents", "导出失败");}JsonArray.add(Json);try {resp.setCharacterEncoding("UTF-8");resp.getWriter().print(Json);} catch (IOException e) {e.printStackTrace();}}public static boolean sendMail(String subject, String to, String content, InputStream is) throws GeneralSecurityException, IOException {  boolean isFlag = false; // 收件人电子邮箱//String to = "收件人邮箱";// 发件人电子邮箱String from = "发件人邮箱";// 指定发送邮件的主机为 smtp.qq.comString host = "smtp.qq.com";  //QQ 邮件服务器// 获取系统属性Properties properties = System.getProperties();// 设置邮件服务器properties.setProperty("mail.smtp.host", host);properties.put("mail.smtp.auth", "true");MailSSLSocketFactory sf = new MailSSLSocketFactory();sf.setTrustAllHosts(true);properties.put("mail.smtp.ssl.enable", "true");properties.put("mail.smtp.ssl.socketFactory", sf);// 获取默认session对象Session session = Session.getDefaultInstance(properties,new Authenticator(){public PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication("发件人邮箱", "ymyebqafdoqjbfif"); //发件人邮件用户名、密码}});try{// 创建默认的 MimeMessage 对象MimeMessage message = new MimeMessage(session);// Set From: 头部头字段message.setFrom(new InternetAddress(from));// Set To: 头部头字段message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));// Set Subject: 头部头字段message.setSubject(subject);// 设置消息体// 创建消息部分BodyPart messageBodyPart = new MimeBodyPart();// 消息messageBodyPart.setText(subject);// 创建多重消息Multipart multipart = new MimeMultipart();// 设置文本消息部分multipart.addBodyPart(messageBodyPart);// 附件部分messageBodyPart = new MimeBodyPart();String filename = subject+".xls";DataSource source = new ByteArrayDataSource(is, "application/msexcel");messageBodyPart.setDataHandler(new DataHandler(source));messageBodyPart.setFileName(filename);multipart.addBodyPart(messageBodyPart);// 发送完整消息message.setContent(multipart);// 发送消息Transport.send(message);System.out.println("Sent message successfully....from runoob.com");isFlag = true; }catch (MessagingException mex) {mex.printStackTrace();isFlag = false; }return isFlag;  //return false;}  }

微信内置浏览器导出Excel表格功能相关推荐

  1. java+自带excel导出_Java实现微信内置浏览器导出Excel表格功能

    最近做项目的时候遇到了这样一个问题,微信内置的浏览器把下载这个功能屏蔽了.唉,,,折腾了一天,从网上各种找资料,但是给的解决方案都不是我想要的(也不知道谁复制的谁的,基本都一样). 在快下班的时候,我 ...

  2. Taro开发微信小程序--实现导出Excel表格功能

    Taro.downloadFile({url:config.apiUrl +`account/checking/excel?supplierId=001&startTime=${state.s ...

  3. 判断网页是否为微信内置浏览器打开?

    文章目录 (两种方法)教你:"如何判断网页是不是在微信端内置浏览器打开?" 本文根据项目开发实际情况,着重探讨在微信内置浏览器中调用支付功能,遇到的几个坑! 目的: (方法一)全部 ...

  4. 使用微信内置浏览器预览图片

    在微信H5开发中预览图片,可以使用其他的一些图片预览插件,但是这样却不能把其中的某张图片发送给好友.对于 这种情况可以使用微信内置浏览器图片预览功能,就可以解决这个问题.不说废话直接看代码: 1.首先 ...

  5. 博客园在微信内置浏览器打开时添加微信赞赏码功能

    我的博客开通了赞赏,看右侧悬浮[打赏],很容易弄,文末有链接. 另外,在微信中打开时,博客正文底部增加微信赞赏码,在微信内置浏览器打开时,长按图片识别,直接可以赞赏. 这本人自己摸索的,未参考任何博文 ...

  6. 关于微信内置浏览器,打开图片上传功能,调用的问题

    关于微信内置浏览器,打开图片上传功能,调用的问题 前段时间,项目完结测试的时候,同事打开魅族手机测试,无意中发现一个奇葩的问题! 描述: 显示的是文件系统,列表式的,没有调用相机的功能图标,为什么呢? ...

  7. 微信公众平台 - 微信内置浏览器 WeixinJSBridge.invoke(‘xxx‘) API 报错:system:access_denied(常见于微信支付、分享朋友圈/转发好友等功能)解决方案

    前言 场景描述:做公众号网页项目,在微信内置浏览器中运行自己的 H5 网站,需要接入微信支付.微信分享等其他能力,因此使用 WeixinJSBridge 这个 API,不料却发生报错. 如下报错所示, ...

  8. 实现:您必须使用微信内置浏览器访问本页面! 的功能

    有些活动页面,只能通过手机,且在微信公众号里点击打开,不能用ie.火狐.谷歌等浏览器打开,请添加如下代码: <script type="text/javascript"> ...

  9. 微信调试--微信内置浏览器为什么对pharser.js支持这么差???

    微信内置浏览器对于html5的支持如何? 是否可以等同于webkit内核的浏览器?CSS3动画的支持程度怎么样? 添加评论 分享 按投票排序按时间排序 31 个回答 28赞同 反对,不会显示你的姓名 ...

最新文章

  1. Linux操作系统(一:基本操作)
  2. MySQL的转义字符“\”
  3. 两个inline-block消除间距和对齐(vertical-align)
  4. python实现八皇后问题(百练OJ:2754:八皇后)
  5. echarts指针进度条刻度调整_指针式流量开关
  6. x = x+1,x+=1,x++那个的执行效率高
  7. Wpf中通过绑定来更新textbox的值
  8. 微信小程序与Vue js数据渲染对比
  9. BZOJ 3729: Gty的游戏 [伪ETT 博弈论]【学习笔记】
  10. licode学习之erizo篇--Pipeline_service
  11. iOS 8 UI布局 AutoLayout及SizeClass(二)
  12. 【报告分享】线上汉服消费洞察报告.pdf(附下载链接)
  13. 2018.10.24
  14. OFD在线预览方案评测
  15. OpenV2X 社区第一次线上交流会成功举办
  16. springbootspringboot杏林中医诊所管理系统133742
  17. 视频怎么加水印?这里有你想要的答案
  18. linux系统下find删除目录下除一文件外的所有文件
  19. UE、UI、 IA和IxD傻傻分不清
  20. 记录一位软件测试实习生的成长

热门文章

  1. 网络远程教育实施方案交流之(三)——服务器架构及视频存储方案
  2. 从零开始使用ESP8266 + Blinker 实现小爱同学可控可读取状态的多路插座
  3. Win10快捷键,管多
  4. CPU设计——CPU核解析——cv32e40p
  5. office2019怎么在同一个窗口显示多个文件
  6. 快讯 | 公链专场,四位大咖分享了些什么(附PPT)
  7. 查询计算机上可用端口的两种方法
  8. 项目管理 | 如何正确的向领导汇报工作?
  9. 测试wifi覆盖范围的软件
  10. 三次bezier曲线 MATLAB,Matlab-画二次及三次Bezier曲线-8控制点的B样条曲线