`

素材管理-新增临时素材

 
阅读更多

1、新增临时素材,接口java代码:

参考:http://zhidao.baidu.com/link?url=yVJG7wo4R-_Ng1QzZscw4sRcRLn55EjYP8sGAIYIrZY2mzddT8K49_Jj49bhPw3wRKfLZMceGTmnGvREHVoPFE3nMSEhobeJbR6TjWnvJX7

    /**
     * 文件上传到微信服务器
     * @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 实现上传网络图片到微信临时素材 在本文中,我们将详细介绍如何使用 Java 语言实现上传网络图片到微信临时素材。微信临时素材是指微信服务器上的一种临时存储形式,通过上传图片到微信临时素材,我们可以在...

    微信公众平台上传和下载临时素材

    PHP微信公众平台上传和下载临时素材用例,把下载到的文件解压到PHP的根目录,浏览器打开静态(index.html)选择上传的图片,点击上传就可以。适合初学者,界面不是很好,没有进行过多的修饰,但功能比较实用。 注意...

    .net core3.1 WebAPI使用HttpClient为企业微信上传临时素材

    asp.net core3.1 webAPI对接企业微信上传临时素材,返回media_id. 来自于实际项目;

    C# 微信素材上传(永久其他类型素材上传)

    提供access_token,文件,文件类型即可完成素材上传。

    微信开发之三素材管理-微信开发php版

    微信开发之素材管理是子恒老师《微信公众平台开发》视频教程的第三部。详细讲解了用php开发微信,对微信公众平台...内容包含微信临时素材,永久素材的上传,删除,获取素材的media_id等等。欢迎反馈,微信/QQ:68183131

    php微信开发之上传临时素材

    本文实例为大家分享了php微信上传临时素材的具体代码,供大家参考,具体内容如下 public function uploadImg($imgUrl){ $TOKEN=$this-&gt;getAccessToken(); $URL ='...

    详解nodejs微信公众号开发——5.素材管理接口

    1. 新增临时素材 临时素材顾名思义是临时的,上传后一定时间就被清理掉,适用于一些有时效性的图文链接。关于临时素材需要注意的点: 对于临时素材,每个素材(media_id)会在开发者上传或粉丝发送到微信服务器3天...

    C# WINFORM酒店管理系统源码

    1、客房管理:客房预约、入住、退房、房间状态信息、新增客房 2、客户管理:客户基本信息增删改查、客户消费清单 3、后勤管理:水电费、库存物资管理 4、行政管理:财务管理(员工工资账单、内部财务账单、酒店盈利...

    魔众文档管理系统+支持Markdown图表脑图富文本等集合.zip

    ·[新功能] 用户新增Meta信息,用于底层临时存储部分关联信息 ·[新功能] Request新增isGet方法用于判断GET请求方式 ·[新功能] 用户注册IP信息 ·[新功能] TextAjaxRequest组件部分属性重构和新增方法 ·[新...

    梦缘网络

    [新增]网站内容自动采集系统,包括新闻采集、文章采集,可以扩展到图片、素材等图文采集;[新增]论坛增加“魔法表情”功能;[新增]论坛帖子楼层颜色渐变,论坛HTML后台控制、生成与打印功能(支持HTML);[新增]增加...

    基于java swing食品管理系统

    1. **套餐管理**:管理员可以新增、编辑和删除套餐。这涉及数据库操作,如添加新记录、更新现有记录和删除记录。在Java中,可以使用JDBC(Java Database Connectivity)接口与数据库进行通信,结合Swing的组件如...

    colour 288使用说明

    - 临时改变Chase的运行速度比率:在播放过程中临时调整播放速度。 #### 十、高级功能 Colour 288 还提供了多种高级功能,满足专业用户的需求。 - **功能**: - 复制功能:可以复制预设效果或走灯程序。 - 删除...

    文件快递柜系统网站源码 匿名口令分享 临时文件分享

    2023最新文件快递柜系统网站源码 | 匿名口令分享 | 临时文件分享 很多时候,我们都想将一些文件或文本传送给别人,或者跨端传递一些信息,但是我们又不想为了分享,而去下载一些七里八里的软件,这时候,我们就可以...

    Multi-Stream ScenariosEnhancing Stimulus Generation in the VMM_paper.pdf

    - **抓取/释放功能**:为了更好地管理多流场景中资源的共享访问,VMM 1.1新增了抓取(`grab`)机制。该机制允许不同的刺激流临时独占资源,从而避免冲突。 - **抓取示例**:通过具体的代码示例,展示了如何使用`grab`...

    git常用命令相关总结

    - `git status`:显示当前工作目录的状态,哪些文件被修改、新增或删除。 5. **提交更改** - `git commit -m "commit message"`:将暂存区的更改提交到本地仓库,需提供描述性的提交信息。 6. **分支操作** - `...

    PHP7基于curl实现的上传图片功能

    分享给大家供大家参考,具体如下: ... $curl = curl_init(); if (defined('CURLOPT_SAFE_UPLOAD')) { curl_setopt($curl, CURLOPT_SAFE_UPLOAD, false); ...$data = array('file' =&gt; '@' ....//‘@' 符号告诉服务器为上传...

    信息管理系统软件维护服务合同.pdf

    3. **功能调整**:对业务需求变化导致的系统功能新增或完善,工作量小于等于2人日。 4. **咨询服务**:解答与系统相关的业务和技术问题。 5. **数据库维护**:定期清理临时表,优化数据库性能。 6. **运维总结**:...

    MySQL复习笔记七:MySQL官方文档及阅读辅助工具

    3. **新功能介绍**:详细介绍了MySQL 5.7版本中新增的功能和改进之处。 4. **安装与配置**:提供了详细的安装步骤和配置指南。 5. **SQL语句参考**:列出了所有可用的SQL命令及其语法。 6. **函数与操作符**:详细...

Global site tag (gtag.js) - Google Analytics