收藏
回答

C# 调用https://api.weixin.qq.com/cv/ocr/返errcode:410

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://api.weixin.qq.com/cv/ocr/comm?access_token=" + getAccessToken());

request.Method = "post";

request.ContentType = "multipart/form-data";

byte[] datas = File.ReadAllBytes(@imgPath);

request.ContentLength = datas.Length;

Stream stream = request.GetRequestStream();

stream.Write(datas, 0, datas.Length);

stream.Close();

try {

HttpWebResponse response = (HttpWebResponse)request.GetResponse();

StreamReader myStreamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);

string retString = myStreamReader.ReadToEnd();

Debug.WriteLine(retString);

return null;

} catch {

Debug.WriteLine("失败");

return null;

}

返回是:{"errcode":41005,"errmsg":"media data missing hint: [Jceyla0861w783] rid: 641c203d-7e15e206-523ae08c"}

这是什么情况呢?

回答关注问题邀请回答
收藏

2 个回答

  • 全新全艺
    全新全艺
    2天前
    [HttpPost]
    public async Task<IActionResult> XCXOCR(string text1, string text2, string text3, IFormFile fileInput)
    {
        Result _Result = new() { Error = 0, Message = "获取编号成功!" };
        try
        {
    
            string _token = "103_vcn-JoX7KqJY1HvQ_nRdpLPZvzWSfuYbvUPWAFO2cEappJE27faSKndA7pSHfp4h1d7ptBYE-H_CIV_uoxn1xlPL-Yum-LWOUuAu3Q970wmbFc49i5woJI_WODMIRAdAAATCL";
            IFormFile _ReceiveFile = fileInput;
            var ext = System.IO.Path.GetExtension(_ReceiveFile.FileName).ToLowerInvariant();
    
            if (string.IsNullOrEmpty(ext) || !permittedExtensions.Contains(ext))
            {
                _Result.Error = 8;
                _Result.Message = "上传的文件格式不正确!";
                goto ExitProgram;
            }
            bool _isfileformat = false;
            _ReceiveFile.OpenReadStream().Seek(0, SeekOrigin.Begin);
    
            using (var reader = new BinaryReader(_ReceiveFile.OpenReadStream()))
            {
                var signatures = _fileSignature[ext];
                var headerBytes = reader.ReadBytes(signatures.Max(m => m.Length));
    
                _isfileformat = signatures.Any(signature =>
                     headerBytes.Take(signature.Length).SequenceEqual(signature));
            }
            if (!_isfileformat)
            {
                _Result.Error = 9;
                _Result.Message = "上传的文件签名不正确!";
                goto ExitProgram;
            }
            try
            {
                _ReceiveFile.OpenReadStream().Seek(0, SeekOrigin.Begin);
                using (var imgBmp = new System.Drawing.Bitmap(_ReceiveFile.OpenReadStream()))
                {
                }
    
            }
            catch
            {
                _Result.Error = 10;
                _Result.Message = "上传的并非图片文件!";
                goto ExitProgram;
    
            }
    
            string apiUrl = $"https://api.weixin.qq.com/cv/ocr/comm?access_token={_token}";
            using (var httpClient = new HttpClient())
            {
    
                // 1. 读取文件内容
                byte[] fileBytes;
                using (var ms = new MemoryStream())
                {
                    await _ReceiveFile.CopyToAsync(ms);
                    fileBytes = ms.ToArray();
                }
    
                string boundary = "------------------------" + DateTime.Now.Ticks.ToString("x");
    
    
    
    
                byte[] multipartBody = BuildMultipartBody(fileBytes, _ReceiveFile.FileName, _ReceiveFile.ContentType, boundary);
    
                // 3. 创建 ByteArrayContent 并设置 Content-Type 头
                var byteContent = new ByteArrayContent(multipartBody);
    
                // 正确方式:使用 MediaTypeHeaderValue 构造函数,分别传入媒体类型和参数
                var contentType = new MediaTypeHeaderValue("multipart/form-data");
                contentType.Parameters.Add(new NameValueHeaderValue("boundary", boundary));
                byteContent.Headers.ContentType = contentType;
    
                // 4. 发送请求
                HttpResponseMessage response = await httpClient.PostAsync(apiUrl, byteContent);
                string responseBody = await response.Content.ReadAsStringAsync();
                // 4. 处理响应
                if (response.IsSuccessStatusCode)
                {
    
                    _Result = new() { Error = 0, Message = $"获取机器编号成功!", Data = responseBody };
                }
                else
                {
    
                    _Result = new() { Error = 11, Message = $"调用失败,状态码: {response.StatusCode}", Data = responseBody };
    
                }
    
            }
                
        }
                
        
         catch (Exception ex)
        {
            _Result = new() { Error = -1, Message = "错误见信息!", Data =ex.ToString() };
        }
    ExitProgram:
        //return JsonSerializer.Serialize(_Result);
        // return $"{{\"Error\":{_Result.Error},\"Message\":\"{_Result.Message}\",\"Data\":\"{_Result.Data}\"}}";
        // return Ok(_Result);
        // var response = new { Success = true, Data = "" };
        return Ok(_Result);
    }
    
    private byte[] BuildMultipartBody(byte[] fileData, string fileName, string contentType, string boundary)
    {
        using var stream = new MemoryStream();
        var encoding = Encoding.UTF8;
    
        // 第一部分:文件部分头部
        string header = $"--{boundary}\r\n" +
                        $"Content-Disposition: form-data; name=\"img\"; filename=\"{fileName}\"\r\n" +
                        $"Content-Type: {contentType}\r\n\r\n";
        byte[] headerBytes = encoding.GetBytes(header);
        stream.Write(headerBytes, 0, headerBytes.Length);
    
        // 文件内容
        stream.Write(fileData, 0, fileData.Length);
    
        // 结束 boundary
        string footer = $"\r\n--{boundary}--\r\n";
        byte[] footerBytes = encoding.GetBytes(footer);
        stream.Write(footerBytes, 0, footerBytes.Length);
    
        return stream.ToArray();
    }
    试试这个代码
    
    2天前
    有用
    回复
  • 王很
    王很
    2023-06-17

    {"errcode":41005,"errmsg":"media data missing hint: [euKmIA0205w972] rid: 648cfc34-1302fb5b-5633b4eb"}

    2023-06-17
    有用
    回复
登录 后发表内容