{"errcode":41005,"errmsg":"media data missing hint: [vhZCFA0310e541]"}
?public static String update(String fileUrl,String accesstoken,String type) throws IOException{
//創(chuàng)建一個(gè)文件file
File file = new File(fileUrl);
//判斷file文件是否為空
if(file==null){
? ? ? ? ? ? ? throw new IOException("文件不存在");
}
@SuppressWarnings("unused")
String url = MESSAGE_FILE_URL.replace("ACCESS_TOKEN", accesstoken).replace("ACCESS_TOKEN",TYPE);
URL urlobj = new URL(url);
urlobj.openStream();
//httpURLConnection實(shí)例的作用是用來(lái)做一個(gè)請(qǐng)求但潛在網(wǎng)絡(luò)連接到HTTP服務(wù)器
HttpURLConnection urlconnection = (HttpURLConnection) urlobj.openConnection();
//進(jìn)行urconnection對(duì)象設(shè)置
urlconnection.setRequestMethod("POST");
urlconnection.setDoInput(true);
urlconnection.setDoOutput(true);
urlconnection.setUseCaches(false);
//設(shè)置請(qǐng)求頭信息
urlconnection.setRequestProperty("Connetion", "Keep-Aliec");
urlconnection.setRequestProperty("Charset", "UTF-8");
//設(shè)置邊界
//currentTimeMillis方法獲取當(dāng)前時(shí)間信息
String BOUNDARY = "-----------"+System.currentTimeMillis();
//Content-Type,內(nèi)容類(lèi)型一般是指網(wǎng)頁(yè)中存在的Content-Type,用于定義網(wǎng)絡(luò)文件的類(lèi)型和網(wǎng)頁(yè)的編碼
//multipart/from-data請(qǐng)求文件上傳類(lèi)型
urlconnection.setRequestProperty("Content-Type","multipart/from-data;boundary="+BOUNDARY);
StringBuilder sb = new StringBuilder();
sb.append("--");
sb.append(BOUNDARY);
sb.append("\r\n");
//Content-Disposition就是當(dāng)用戶請(qǐng)求所得內(nèi)容存為一個(gè)文件的提供一個(gè)默認(rèn)的文件名
sb.append("Content-Disposition:from-data;name=\"file\";filename=\""+file.getName()+"\"\r\n");
//application.octet-stream 只能提交二進(jìn)制,而且提交一個(gè)二進(jìn)制,如果提交文件的話,只能提交一個(gè)文件
//后臺(tái)接收參數(shù)只能有一個(gè),而且還只能是流或者是字節(jié)碼
sb.append("Content-Type;application/octet-stream\r\n\r\n");
//創(chuàng)建一個(gè)byte數(shù)組
? ? ? ? //sb對(duì)象數(shù)據(jù)轉(zhuǎn)換成字節(jié)碼
byte[] head = sb.toString().getBytes("utf-8");
//獲取輸出流 ? getoutputStream作用就是返回使用此連接的流
//OutputStream 該抽象類(lèi)是所有類(lèi)的字節(jié)輸出流的父類(lèi)
//DataOutputStream 創(chuàng)建一個(gè)新的數(shù)據(jù)輸出流,以便將數(shù)據(jù)寫(xiě)入指定的基礎(chǔ)輸出流,返回為零
OutputStream output = new DataOutputStream(urlconnection.getOutputStream());
//在將字節(jié)碼數(shù)據(jù)轉(zhuǎn)入到流對(duì)象中
output.write(head);
//文件正文部分
//把文件一流文件的方式 推入url中
//DateinputStream的作用就是file目錄的文件以流的方式輸入進(jìn)來(lái)
DataInputStream in = new DataInputStream(new FileInputStream(file));
int bytes = 0;
byte []b = new byte[1024];
while((bytes=in.read(b))!=-1){
output.write(b, 0, bytes);
}
//關(guān)閉輸入流
in.close();
//結(jié)尾部分
byte []foot = ("\r\n=="+BOUNDARY+"==\r\n").getBytes("utf-8"); //定義最后數(shù)據(jù)分割線
//把定義最后的數(shù)據(jù)分割線字節(jié)碼數(shù)據(jù)轉(zhuǎn)入流對(duì)象中
output.write(foot);
//刷新
output.flush();
//關(guān)閉
output.close();
StringBuffer buffer = new StringBuffer();
BufferedReader reader = null;
String result = null;
try {
//定義一個(gè)BufferRader輸入流來(lái)讀取url的響應(yīng)
reader = new BufferedReader(new InputStreamReader(urlconnection.getInputStream()));
System.out.println(urlconnection.getInputStream());
String line = null;
//while循環(huán)讀取文字
while((line=reader.readLine())!=null){
buffer.append(line);
}
if(result == null){
result = buffer.toString();
}
} catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
}finally{
//關(guān)閉流
? ? ? ? ? ? if(reader!=null){
? ? ? ? ? ? reader.close();
? ? ? ? ? ? System.out.println("關(guān)閉");
? ? ? ? ? ? }
}
JSONObject jsonobject = JSONObject.fromObject(result);
System.out.println(jsonobject.toString());
String mediaid = jsonobject.getString("media_id");
return mediaid;
}
?AccessToken accesstoken = WeiXinUtil.initaccessToken();?
? System.out.println(accesstoken.getAccesstoken());
? System.out.println(accesstoken.getExpiresin());
? String url = "E:\\Photshop\\PS練習(xí)圖片\\cbcfe277b0079c38dfa3b27c8ee36d88.jpg";
? try {
String message = WeiXinUtil.update(url, accesstoken.getAccesstoken(), "type");
? ?System.out.println(message);
? } catch (IOException e) {
e.printStackTrace();
}
2017-08-02
您好老師可是還是報(bào)這個(gè)錯(cuò)啊,{"errcode":41005,"errmsg":"media data missing hint: [Au7ZpA0819e547]"}