使用图床服务存储图片的步骤如下:
-
选择图床服务提供商
常见的图床服务有 SM.MS、Imgbb、Postimage 等。选择时可以考虑服务稳定性、免费容量、上传速度等因素。 -
获取图床 API 密钥
大多数图床服务都提供 API 接口,需要先注册账号并获取相应的 API 密钥。这个密钥用于授权应用程序访问图床服务。 -
上传图片到图床
通常可以使用 HTTP POST 请求将图片数据上传到图床服务。可以把图片数据转换为 Base64 编码后上传,或者直接上传二进制数据。示例代码(使用 Python 和 requests 库):
import requests import base64 # 图片数据(Base64 编码) image_data = base64.b64encode(open('image.png', 'rb').read()) # 图床 API 密钥 api_key = 'your_api_key' # 请求头 headers = {'Authorization': api_key} # 上传文件 files = {'smfile': ('image.png', image_data)} url = 'https://sm.ms/api/v2/upload' response = requests.post(url, files=files, headers=headers) # 解析响应 data = response.json() if data['success']: image_url = data['data']['url'] print(f'Image uploaded successfully: {image_url}') else: print(f'Error uploading image: {data["message"]}')
-
将图片 URL 保存到数据库
在应用程序中,将上传成功后返回的图片 URL 保存到数据库中,以便后续使用。
使用图床服务可以避免将图片数据直接存储在数据库中,减轻数据库的负担。同时,图床服务通常提供更好的图片管理和访问功能。不过需要注意的是,需要考虑图床服务的可靠性和长期可用性。
def create(self, value_list): for value in value_list: value['image_id'] = self.env['ir.sequence'].next_by_code('image') # 图床 image_data = value['image'] image_data = base64.b64decode(image_data) headers = {'Authorization': '???'} files = {'smfile': ('image.png', image_data)} url = 'https://sm.ms/api/v2/upload' res = requests.post(url, files=files, headers=headers).json() value['image_path'] = res['data']['url'] print(res['data']['url']) print(value['image_path']) # 本地生成图片路径 # base_path = 'bitpulse/tutor/images' # image_data = value['image'] # timestamp = dat