{"errcode":41005,"errmsg":"media data missing hint: [vhZCFA0310e541]"}
?public static String update(String fileUrl,String accesstoken,String type) throws IOException{
//創建一個文件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實例的作用是用來做一個請求但潛在網絡連接到HTTP服務器
HttpURLConnection urlconnection = (HttpURLConnection) urlobj.openConnection();
//進行urconnection對象設置
urlconnection.setRequestMethod("POST");
urlconnection.setDoInput(true);
urlconnection.setDoOutput(true);
urlconnection.setUseCaches(false);
//設置請求頭信息
urlconnection.setRequestProperty("Connetion", "Keep-Aliec");
urlconnection.setRequestProperty("Charset", "UTF-8");
//設置邊界
//currentTimeMillis方法獲取當前時間信息
String BOUNDARY = "-----------"+System.currentTimeMillis();
//Content-Type,內容類型一般是指網頁中存在的Content-Type,用于定義網絡文件的類型和網頁的編碼
//multipart/from-data請求文件上傳類型
urlconnection.setRequestProperty("Content-Type","multipart/from-data;boundary="+BOUNDARY);
StringBuilder sb = new StringBuilder();
sb.append("--");
sb.append(BOUNDARY);
sb.append("\r\n");
//Content-Disposition就是當用戶請求所得內容存為一個文件的提供一個默認的文件名
sb.append("Content-Disposition:from-data;name=\"file\";filename=\""+file.getName()+"\"\r\n");
//application.octet-stream 只能提交二進制,而且提交一個二進制,如果提交文件的話,只能提交一個文件
//后臺接收參數只能有一個,而且還只能是流或者是字節碼
sb.append("Content-Type;application/octet-stream\r\n\r\n");
//創建一個byte數組
? ? ? ? //sb對象數據轉換成字節碼
byte[] head = sb.toString().getBytes("utf-8");
//獲取輸出流 ? getoutputStream作用就是返回使用此連接的流
//OutputStream 該抽象類是所有類的字節輸出流的父類
//DataOutputStream 創建一個新的數據輸出流,以便將數據寫入指定的基礎輸出流,返回為零
OutputStream output = new DataOutputStream(urlconnection.getOutputStream());
//在將字節碼數據轉入到流對象中
output.write(head);
//文件正文部分
//把文件一流文件的方式 推入url中
//DateinputStream的作用就是file目錄的文件以流的方式輸入進來
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);
}
//關閉輸入流
in.close();
//結尾部分
byte []foot = ("\r\n=="+BOUNDARY+"==\r\n").getBytes("utf-8"); //定義最后數據分割線
//把定義最后的數據分割線字節碼數據轉入流對象中
output.write(foot);
//刷新
output.flush();
//關閉
output.close();
StringBuffer buffer = new StringBuffer();
BufferedReader reader = null;
String result = null;
try {
//定義一個BufferRader輸入流來讀取url的響應
reader = new BufferedReader(new InputStreamReader(urlconnection.getInputStream()));
System.out.println(urlconnection.getInputStream());
String line = null;
//while循環讀取文字
while((line=reader.readLine())!=null){
buffer.append(line);
}
if(result == null){
result = buffer.toString();
}
} catch (IOException e) {
? ? ? ? ? ? ? ? e.printStackTrace();
}finally{
//關閉流
? ? ? ? ? ? if(reader!=null){
? ? ? ? ? ? reader.close();
? ? ? ? ? ? System.out.println("關閉");
? ? ? ? ? ? }
}
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練習圖片\\cbcfe277b0079c38dfa3b27c8ee36d88.jpg";
? try {
String message = WeiXinUtil.update(url, accesstoken.getAccesstoken(), "type");
? ?System.out.println(message);
? } catch (IOException e) {
e.printStackTrace();
}
2017-08-02
41005缺少多媒體文件數據
錯誤出處:String message = WeiXinUtil.update(url, accesstoken.getAccesstoken(), "type");
這里的"type"寫錯了應該寫你所要上傳的圖片的格式,因為你上傳的是圖片,所以應該是"image"
??
2019-10-15
byte []foot = ("\r\n=="+BOUNDARY+"==\r\n").getBytes("utf-8"); //定義最后數據分割線
== 換 --
2019-06-10
有解決的嘛,同樣是這問題
2017-11-05
解決辦法:因為php版本的原因,上傳素材一直保錯。php的curl的curl_setopt 函數存在版本差異
php5.5已經把通過@加文件路徑上傳文件的方式給放入到Deprecated中了。php5.6默認是不支持這種方式了
特殊處理1:curl_setopt ( $ch,?CURLOPT_SAFE_UPLOAD,?false);
特殊處理2:$post_data ['media'] ?= '@'.$file;
2017-11-03
public static String update(String fileUrl,String accesstoken,String type) throws IOException{
//創建一個文件file
File file = new File(fileUrl);
//判斷file文件是否為空
if(file==null) ? throw new IOException("文件不存在");
String url = UPLOAD_URL.replace("ACCESS_TOKEN", accesstoken).replace("TYPE",type);
URL urlobj = new URL(url);
urlobj.openStream();
//httpURLConnection實例的作用是用來做一個請求但潛在網絡連接到HTTP服務器
HttpURLConnection urlconnection = (HttpURLConnection) urlobj.openConnection();
//進行urconnection對象設置
urlconnection.setRequestMethod("POST");
urlconnection.setDoInput(true);
urlconnection.setDoOutput(true);
urlconnection.setUseCaches(false);
//設置請求頭信息
urlconnection.setRequestProperty("Connection", "Keep-Alive");
urlconnection.setRequestProperty("Charset", "UTF-8");
//設置邊界
//currentTimeMillis方法獲取當前時間信息
String BOUNDARY = "-----------"+System.currentTimeMillis();
//Content-Type,內容類型一般是指網頁中存在的Content-Type,用于定義網絡文件的類型和網頁的編碼
//multipart/from-data請求文件上傳類型
urlconnection.setRequestProperty("Content-Type","multipart/form-data;boundary="+BOUNDARY);
StringBuilder sb = new StringBuilder();
sb.append("--");
sb.append(BOUNDARY);
sb.append("\r\n");
//Content-Disposition就是當用戶請求所得內容存為一個文件的提供一個默認的文件名
sb.append("Content-Disposition:form-data;name=\"file\";filename=\""+file.getName()+"\"\r\n");
//application.octet-stream 只能提交二進制,而且提交一個二進制,如果提交文件的話,只能提交一個文件
//后臺接收參數只能有一個,而且還只能是流或者是字節碼
sb.append("Content-Type:application/octet-stream\r\n\r\n");
//創建一個byte數組
? ? ? ?//sb對象數據轉換成字節碼
byte[] head = sb.toString().getBytes("utf-8");
//獲取輸出流 ? getoutputStream作用就是返回使用此連接的流
//OutputStream 該抽象類是所有類的字節輸出流的父類
//DataOutputStream 創建一個新的數據輸出流,以便將數據寫入指定的基礎輸出流,返回為零
OutputStream output = new DataOutputStream(urlconnection.getOutputStream());
//在將字節碼數據轉入到流對象中
output.write(head);
//文件正文部分
//把文件一流文件的方式 推入url中
//DateinputStream的作用就是file目錄的文件以流的方式輸入進來
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);
}
//關閉輸入流
in.close();
//結尾部分
byte []foot = ("\r\n--"+BOUNDARY+"--\r\n").getBytes("utf-8"); //定義最后數據分割線
//把定義最后的數據分割線字節碼數據轉入流對象中
output.write(foot);
//刷新
output.flush();
//關閉
output.close();
StringBuffer buffer = new StringBuffer();
BufferedReader reader = null;
String result = null;
try {
//定義一個BufferRader輸入流來讀取url的響應
reader = new BufferedReader(new InputStreamReader(urlconnection.getInputStream()));
System.out.println(urlconnection.getInputStream());
String line = null;
//while循環讀取文字
while((line=reader.readLine())!=null){
buffer.append(line);
}
if(result == null){
result = buffer.toString();
}
} catch (IOException e) {
? ?e.printStackTrace();
}finally{
//關閉流
? ? ? ? ? ? if(reader!=null){
? ? ? ? ? ? reader.close();
? ? ? ? ? ? System.out.println("關閉");
? ? ? ? ? ? }
}
JSONObject jsonobject = JSONObject.fromObject(result);
System.out.println(jsonobject.toString());
String mediaid = jsonobject.getString("media_id");
return mediaid;
}
2017-10-21
有人解決的,出來分享下啊
2017-10-08
urlconnection.setRequestProperty("Connetion", "Keep-Aliec")寫錯了,Keep-Aliec改為Keep-Alive
2017-09-21
我也是這個錯誤,各位有解決嗎?
2017-09-18
你好,你現在這個問題解決了沒有呢
2017-08-09
我也是這個問題,題主解決了嗎?