Python请求:将图像上传为字节数组

时间:2015-07-17 20:28:44

标签: c# python asp.net asp.net-web-api2 python-requests

目标:使用asp.net web / api,定义允许通过字节数组上传图像的签名,并使用python请求测试操作。

问题:我似乎无法获得除不支持的媒体类型以外的响应

津贴:我控制了API,所以只要最终以字节数组结尾,我就可以根据需要进行修改,这样我就不必重新编写业务了层

我的第一次刺伤:

(ASP.Net Api-Controller)方法):

[Route("api/scenes/{id}/images")]
[Route("api/v0/scenes/scenes/{id}/images")]
[HttpPost]
public HttpResponseMessage AddImageToScene(long id, string type, [FromBody] byte[] value)

我的Python脚本:

# FORM THE FULLY QUALIFIED PATH
file_name = name + ".png"
path = os.path.join(resource_path, file_name)

# SEND THE COMMAND
files = {'image': (file_name, open(path, 'rb'), 'image/png')}
url = helper.baseUri + self.route
requests.post(url, files=files)

响应(来自我自己的输出打印机):

  

[ERROR] Api调用返回错误415 [ERROR] Unsupported Media   型

结论: 我尝试过多种变体,是的,我已经查看了文档here,但我似乎并不聪明,无法使其发挥作用。我怀疑我并不是真的想把它称为图像,因为我把它分成了字节 - 但我没有看到任何我认为合适的MIME选项。

1 个答案:

答案 0 :(得分:0)

为了后人的缘故,虽然从我最初的方法改变了,但我确实得到了以下工作。请注意,我不相信我需要这里的类型作为参数,因为我应该能够从请求标题中提取媒体类型...我还没有达到它。

public HttpResponseMessage AddImageToScene2(long id, string type)
    {
        SceneHandler handler = null;

        try
        {


            var content = Request.Content;
            var asBytes = content.ReadAsByteArrayAsync().Result;

            using (handler = new SceneHandler()) // <-- my own custom class
            {
                var image = new ImageNewOrUpdate(asBytes, type);
                var response = handler.AddImage(id, image.Value, image.ImageType);

                return Request.CreateResponse(HttpStatusCode.Created, response);
            }
        }
        catch (Exception ex)
        {
            return new HttpErrorResponseFactory(Request, ex, handler).GetResponse();
        }
    }