首页 > 解决方案 > AttributeError:“响应”对象没有属性“类型”

问题描述

谁能帮我解决这个错误。我正在尝试从查询字符串图像 url 中保存图像。但遇到以下错误。我的代码如下,请忽略不必要的库

from flask_restful import Resource, Api
import requests
import uuid
from PIL import Image
import urllib.request as urllib
import io

app = Flask(__name__)
api = Api(app)

abc = uuid.uuid4().hex[:6].upper()

class Predict(Resource):
    def get(self):
        url = request.args['url']
        r = requests.get(url)
        fd = urllib.urlopen(r)
        image_file = io.BytesIO(fd.read())
        im = Image.open(image_file)
        return im.save(abc+".png")


api.add_resource(Predict, '/')

if __name__ == "__main__":
    app.run("", port=7999, debug=True)

输出错误:

在此处输入图像描述

标签: pythonimageflaskweb-scrapingpython-requests

解决方案


要保存在您不需要的文件中Image-BytesIO()您可以直接open()使用write()

如果你想用不同的名字保存每张图片,那么你应该abc在里面创建get()

from flask import Flask, request
from flask_restful import Resource, Api
import requests
import uuid

app = Flask(__name__)
api = Api(app)

#abc = uuid.uuid4().hex[:6].upper()  # one name for all images

class Predict(Resource):

    def get(self):
        abc = uuid.uuid4().hex[:6].upper()  # generate new name for new image
        filename = abc + '.png'
        #print(filename)

        url = request.args['url']

        r = requests.get(url)

        f = open(filename, 'wb')  # write in bytes-mode 'wb'
        f.write(r.content)
        f.close()

        return {'status': 'OK', 'name': filename}

api.add_resource(Predict, '/')

if __name__ == "__main__":
    app.run("", port=7999, debug=True)

只有当您想在保存之前编辑图像时,您才Image需要。BytesIO

from flask import Flask, request
from flask_restful import Resource, Api
import requests
import uuid
from PIL import Image
import io

app = Flask(__name__)
api = Api(app)

#abc = uuid.uuid4().hex[:6].upper() # one name for all images

class Predict(Resource):

    def get(self):
        abc = uuid.uuid4().hex[:6].upper()  # generate new name for new image
        filename = abc + '.png'
        #print(filename)

        url = request.args['url']

        r = requests.get(url)

        fp = io.BytesIO(r.content)
        img = Image.open(fp)

        img = img.resize( (800, 600) )  # resize image

        img.save(filename)

        return {'status': 'OK', 'name': filename}

api.add_resource(Predict, '/')

if __name__ == "__main__":
    app.run("", port=7999, debug=True)

推荐阅读