为了账号安全,请及时绑定邮箱和手机立即绑定

{"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();

}


正在回答

11 回答

41005缺少多媒体文件数据

错误出处:String message = WeiXinUtil.update(url, accesstoken.getAccesstoken(), "type");

这里的"type"写错了应该写你所要上传的图片的格式,因为你上传的是图片,所以应该是"image"


  

0 回复 有任何疑惑可以回复我~
#1

画画3967669 提问者

还是有错
2017-08-02 回复 有任何疑惑可以回复我~

byte []foot = ("\r\n=="+BOUNDARY+"==\r\n").getBytes("utf-8"); //定义最后数据分割线

== 换 --

0 回复 有任何疑惑可以回复我~

有解决的嘛,同样是这问题


1 回复 有任何疑惑可以回复我~
#1

dongzhichaogeek

byte []foot = ("\r\n=="+BOUNDARY+"==\r\n").getBytes("utf-8"); //定义最后数据分割线 == 换 --
2019-10-15 回复 有任何疑惑可以回复我~

解决办法:因为php版本的原因,上传素材一直保错。php的curl的curl_setopt 函数存在版本差异

php5.5已经把通过@加文件路径上传文件的方式给放入到Deprecated中了。php5.6默认是不支持这种方式了

特殊处理1:curl_setopt ( $ch, CURLOPT_SAFE_UPLOAD, false);

特殊处理2:$post_data ['media']  = '@'.$file;


1 回复 有任何疑惑可以回复我~
#1

乱想瞎干

感谢大神,好使
2017-11-30 回复 有任何疑惑可以回复我~

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;

}


1 回复 有任何疑惑可以回复我~

有人解决的,出来分享下啊


0 回复 有任何疑惑可以回复我~

urlconnection.setRequestProperty("Connetion", "Keep-Aliec")写错了,Keep-Aliec改为Keep-Alive

0 回复 有任何疑惑可以回复我~

我也是这个错误,各位有解决吗?

0 回复 有任何疑惑可以回复我~

你好,你现在这个问题解决了没有呢

0 回复 有任何疑惑可以回复我~

我也是这个问题,题主解决了吗?

0 回复 有任何疑惑可以回复我~
首页上一页12下一页尾页

举报

0/150
提交
取消

{"errcode":41005,"errmsg":"media data missing hint: [vhZCFA0310e541]"}

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信