`

素材管理-新增临时素材

 
阅读更多

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实现上传网络图片到微信临时素材,网络图片上传到微信服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

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

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

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

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

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

    asp.net微信开发(永久素材管理)

    除了3天就会失效的临时素材外,开发者有时需要永久保存一些素材,届时就可以通过本接口新增永久素材。 最近更新,永久图片素材新增后,将带有URL返回给开发者,开发者可以在腾讯系域名内使用(腾讯系域名外使用,...

    C# WINFORM酒店管理系统源码

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

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

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

    梦缘网络

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

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

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

    基于java+vue前后端分离的小区物联网平台源码

    前段采用主流vue+elementui+admin 后端采用spring boot 1.小区资源操作 1.1 新增小区 ...8.临时车费用资源操作 8.1 新增费用 8.2 修改费用 8.3 删除费用 9.道闸问候语资源操作 9.1 问候语修改 9.2 手工进出场

    jizhicms(极致CMS)建站系统-PHP

    微信登录支持微信支付/支付宝支付支持微信接入/获取微信素材后台管理员多角色管理:每个角色可以设定不同后台界面(结合桌面设置),每个角色可以指定管理某个栏目图片管理:各种上传的图片可以进行管理,可以及时...

    世界排名第一的视频转换工具Grass Valley ProCoder3.00.50汉化破解版(共4分卷75M)分卷四

    支持AVCHD便携摄像机的格式 — 新增的AVCHD解码功能可以将新一代的AVCHD便携摄像机里的视频素材转换后用于编辑、输出流媒体或刻录DVD。 加快多核CPU系统的编码速度 — MPEG-2(传输流)的Grid编码支持,为新的多核...

    世界排名第一的视频转换工具Grass Valley ProCoder3.00.50汉化破解版(共4分卷75M)分卷一

    支持AVCHD便携摄像机的格式 — 新增的AVCHD解码功能可以将新一代的AVCHD便携摄像机里的视频素材转换后用于编辑、输出流媒体或刻录DVD。 加快多核CPU系统的编码速度 — MPEG-2(传输流)的Grid编码支持,为新的多核...

    世界排名第一的视频转换工具Grass Valley ProCoder3.00.50汉化破解版(共4分卷75M)分卷三

    支持AVCHD便携摄像机的格式 — 新增的AVCHD解码功能可以将新一代的AVCHD便携摄像机里的视频素材转换后用于编辑、输出流媒体或刻录DVD。 加快多核CPU系统的编码速度 — MPEG-2(传输流)的Grid编码支持,为新的多核...

    EditPlus_3.40.683 中文版

    * FTP 选项“上传为临时文件, 然后改名” * SOCKS5 代理选项 * 目录窗口支持 CHMOD 命令 * “使用 TortoiseGit”菜单选项 (“文件”-&gt;“TortoiseSVN”) * “搜索”-&gt;“搜索 Web”菜单命令 * 拆分窗格具有独立滚动条 ...

    世界排名第一的视频转换工具Grass Valley ProCoder3.00.50汉化破解版(共4分卷75M)分卷二

    支持AVCHD便携摄像机的格式 — 新增的AVCHD解码功能可以将新一代的AVCHD便携摄像机里的视频素材转换后用于编辑、输出流媒体或刻录DVD。 加快多核CPU系统的编码速度 — MPEG-2(传输流)的Grid编码支持,为新的多核...

    文档工具 - 多种文件格式转换处理的工具软件.rar

    完成后可选择是否移除TempDocx目录 【程序会生成一个转换DOCX的临时目录,可选择结束后自动删除】 转换完毕后合并列表里面的PDF文件 【目前暂时禁用,已添加到合并PDF页面】 PDF转WORD 【不支持扫描件PDF】 EXCEL...

Global site tag (gtag.js) - Google Analytics