1、新增临时素材,接口java代码:
/** * 文件上传到微信服务器 * @param fileType 文件类型 * @param filePath 文件路径 * @return JSONObject * @throws Exception */ public static JSONObject mediaUpload(String fileType, String filePath) throws Exception { String result = null; File file = new File(filePath); if (!file.exists() || !file.isFile()) { throw new IOException("文件不存在"); } /** * 第一部分 */ URL urlObj = new URL("http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token="+ getAccessToken().getToken() + "&type=" + fileType + ""); HttpURLConnection con = (HttpURLConnection) urlObj.openConnection(); con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式 con.setDoInput(true); con.setDoOutput(true); con.setUseCaches(false); // post方式不能使用缓存 // 设置请求头信息 con.setRequestProperty("Connection", "Keep-Alive"); con.setRequestProperty("Charset", "UTF-8"); // 设置边界 String BOUNDARY = "----------" + System.currentTimeMillis(); con.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY); // 请求正文信息 // 第一部分: StringBuilder sb = new StringBuilder(); sb.append("--"); // 必须多两道线 sb.append(BOUNDARY); sb.append("\r\n"); sb.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n"); sb.append("Content-Type:application/octet-stream\r\n\r\n"); byte[] head = sb.toString().getBytes("utf-8"); // 获得输出流 OutputStream out = new DataOutputStream(con.getOutputStream()); // 输出表头 out.write(head); // 文件正文部分 // 把文件已流文件的方式 推入到url中 DataInputStream in = new DataInputStream(new FileInputStream(file)); int bytes = 0; byte[] bufferOut = new byte[1024]; while ((bytes = in.read(bufferOut)) != -1) { out.write(bufferOut, 0, bytes); } in.close(); // 结尾部分 byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定义最后数据分隔线 out.write(foot); out.flush(); out.close(); StringBuffer buffer = new StringBuffer(); BufferedReader reader = null; try { // 定义BufferedReader输入流来读取URL的响应 reader = new BufferedReader(new InputStreamReader( con.getInputStream())); String line = null; while ((line = reader.readLine()) != null) { System.out.println(line); buffer.append(line); } if (result == null) { result = buffer.toString(); } } catch (IOException e) { System.out.println("发送POST请求出现异常!" + e); e.printStackTrace(); throw new IOException("数据读取异常"); } finally { if (reader != null) { reader.close(); } } JSONObject jsonObj = JSONObject.fromObject(result); return jsonObj; }
2、获取access_token代码:
/** * 获取access_token * * @return */ public static AccessToken getAccessToken() { AccessToken accessToken = null; String requestUrl = access_token_url.replace("APPID", WxConstants.APPID).replace("APPSECRET", WxConstants.SECRET); JSONObject jsonObject = httpRequest(requestUrl, "GET", null); // 如果请求成功 if (null != jsonObject) { try { accessToken = new AccessToken(); accessToken.setToken(jsonObject.getString("access_token")); accessToken.setExpiresIn(jsonObject.getInt("expires_in")); } catch (JSONException e) { accessToken = null; // 获取token失败 logger.error("获取token失败 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg")); } } logger.debug("获取token成功accessToken:--------------------------------------"+accessToken.getToken()); return accessToken; }
3、新增临时素材Controller层代码:
/** * 新增临时素材 */ public void save() { ResultModel rm = new ResultModel(); WxMaterial wxMaterial = new WxMaterial(); String uploadDir = FileTool.getUploadFileDir();//存放目录 String filePath = PathKit.getWebRootPath() + uploadDir; List<UploadFile> files = new ArrayList<UploadFile>(); try{ files = getFiles(filePath,MAXSize); }catch (Exception e) { e.printStackTrace(); rm.setMsg("附件大小必须在2M内"); renderJson(rm); return; } String title = getPara("title"); String uuid = UniqueIDGenerator.getUUID(); try { if(files!=null && files.size()>0){ UploadFile uploadFile = files.get(0); logger.debug("文件路径:"+filePath + "/" + uploadFile.getFileName()); JSONObject mediaUpload = WeixinUtil.mediaUpload(WeixinUtil.MEDIA_UPLOAD_IMAGE_, filePath + "/" + uploadFile.getFileName()); //上传失败 if (mediaUpload == null || (mediaUpload.get("errcode") !=null && 0 != mediaUpload.getInt("errcode"))) { logger.debug("上传文件失败:"+mediaUpload.toString()); }else{ WxMaterialBean wxMaterialBean = (WxMaterialBean)JSONObject.toBean( mediaUpload,WxMaterialBean.class ); //保存文件 String oldFileName=uploadFile.getFileName(); String suffixFile=FileTool.GetExtensionName(oldFileName);// String newFileName=UniqueIDGenerator.getUUID()+"."+suffixFile; boolean upResult=FileTool.RenameFile(filePath,oldFileName,newFileName); String newPath = (uploadDir+File.separator+newFileName).replaceAll("\\\\", "/"); AttachFile attachFile = new AttachFile(); attachFile.set("uuid", uuid); attachFile.set("content_type", uploadFile.getContentType()); attachFile.set("name", newFileName); attachFile.set("old_name", oldFileName); attachFile.set("field_name", uploadFile.getParameterName()); attachFile.set("path", newPath); attachFile.save(); wxMaterial.set("uuid", uuid); wxMaterial.set("title", title); wxMaterial.set("type", wxMaterialBean.getType()); wxMaterial.set("media_id", wxMaterialBean.getMedia_id()); wxMaterial.set("created_at", wxMaterialBean.getCreated_at()); wxMaterial.save(); rm.setMsg("新增素材成功!"); rm.setSuccessCode(); renderJson(rm); logger.debug("后台--新增临时素材成功-------------------"+(wxMaterial==null?"":wxMaterial.toString())); return; } } } catch (Exception e) { e.printStackTrace(); } rm.setFailCode(); rm.setMsg("新增素材失败!"); renderJson(rm); logger.debug("后台--新增临时素材失败-------------------"+(wxMaterial==null?"":wxMaterial.toString())); }
相关推荐
小易Smalle博文:微信公众平台开发【素材管理】上传临时素材http://blog.csdn.net/oldinaction/article/details/47903989 示例代码
Java 实现上传网络图片到微信临时素材 在本文中,我们将详细介绍如何使用 Java 语言实现上传网络图片到微信临时素材。微信临时素材是指微信服务器上的一种临时存储形式,通过上传图片到微信临时素材,我们可以在...
PHP微信公众平台上传和下载临时素材用例,把下载到的文件解压到PHP的根目录,浏览器打开静态(index.html)选择上传的图片,点击上传就可以。适合初学者,界面不是很好,没有进行过多的修饰,但功能比较实用。 注意...
asp.net core3.1 webAPI对接企业微信上传临时素材,返回media_id. 来自于实际项目;
提供access_token,文件,文件类型即可完成素材上传。
微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台...内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131
本文实例为大家分享了php微信上传临时素材的具体代码,供大家参考,具体内容如下 public function uploadImg($imgUrl){ $TOKEN=$this->getAccessToken(); $URL ='...
1. 新增临时素材 临时素材顾名思义是临时的,上传后一定时间就被清理掉,适用于一些有时效性的图文链接。关于临时素材需要注意的点: 对于临时素材,每个素材(media_id)会在开发者上传或粉丝发送到微信服务器3天...
1、客房管理:客房预约、入住、退房、房间状态信息、新增客房 2、客户管理:客户基本信息增删改查、客户消费清单 3、后勤管理:水电费、库存物资管理 4、行政管理:财务管理(员工工资账单、内部财务账单、酒店盈利...
·[新功能] 用户新增Meta信息,用于底层临时存储部分关联信息 ·[新功能] Request新增isGet方法用于判断GET请求方式 ·[新功能] 用户注册IP信息 ·[新功能] TextAjaxRequest组件部分属性重构和新增方法 ·[新...
[新增]网站内容自动采集系统,包括新闻采集、文章采集,可以扩展到图片、素材等图文采集;[新增]论坛增加“魔法表情”功能;[新增]论坛帖子楼层颜色渐变,论坛HTML后台控制、生成与打印功能(支持HTML);[新增]增加...
1. **套餐管理**:管理员可以新增、编辑和删除套餐。这涉及数据库操作,如添加新记录、更新现有记录和删除记录。在Java中,可以使用JDBC(Java Database Connectivity)接口与数据库进行通信,结合Swing的组件如...
- 临时改变Chase的运行速度比率:在播放过程中临时调整播放速度。 #### 十、高级功能 Colour 288 还提供了多种高级功能,满足专业用户的需求。 - **功能**: - 复制功能:可以复制预设效果或走灯程序。 - 删除...
2023最新文件快递柜系统网站源码 | 匿名口令分享 | 临时文件分享 很多时候,我们都想将一些文件或文本传送给别人,或者跨端传递一些信息,但是我们又不想为了分享,而去下载一些七里八里的软件,这时候,我们就可以...
- **抓取/释放功能**:为了更好地管理多流场景中资源的共享访问,VMM 1.1新增了抓取(`grab`)机制。该机制允许不同的刺激流临时独占资源,从而避免冲突。 - **抓取示例**:通过具体的代码示例,展示了如何使用`grab`...
- `git status`:显示当前工作目录的状态,哪些文件被修改、新增或删除。 5. **提交更改** - `git commit -m "commit message"`:将暂存区的更改提交到本地仓库,需提供描述性的提交信息。 6. **分支操作** - `...
分享给大家供大家参考,具体如下: ... $curl = curl_init(); if (defined('CURLOPT_SAFE_UPLOAD')) { curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false); ...$data = array('file' => '@' ....//‘@' 符号告诉服务器为上传...
3. **功能调整**:对业务需求变化导致的系统功能新增或完善,工作量小于等于2人日。 4. **咨询服务**:解答与系统相关的业务和技术问题。 5. **数据库维护**:定期清理临时表,优化数据库性能。 6. **运维总结**:...
3. **新功能介绍**:详细介绍了MySQL 5.7版本中新增的功能和改进之处。 4. **安装与配置**:提供了详细的安装步骤和配置指南。 5. **SQL语句参考**:列出了所有可用的SQL命令及其语法。 6. **函数与操作符**:详细...