用Flask寫一個上傳圖片的API
話說星期一的時候,我們資料組開會佈置這個禮拜的人。組長這樣跟我說:
“這兩天你把上禮拜爬的那幾萬張圖片都上傳到阿里雲去”
“嗯”
“還有把裡面的廣告啊水印啊都去掉,我這裡買個網易雲盾讓你用”
“嗯”
“這些星期三大概就完成了”
“嗯”
“然後你用flask寫一個上傳圖片的API,方便以後使用,這樣就不需要每次都再爬蟲那裡處理圖片”
“哈?”
“哈!”
“什麼?”
“你不是會flask的麼”
“會啊!”
“那不就得了”
“。。。。。”
我當時心裡是這樣想的:
1.寫一個專門用來上傳圖片的程式,部署到伺服器?難道是亞馬遜的lambada那個按次收費的服務,跑一次就給一次錢?可是,圖片上傳為什麼要用flask?
2.flask的API不是用來返回json格式的麼,怎麼上傳圖片啊?我先傳好圖片,寫進資料庫,然後flask從資料庫讀取?
怎麼都想不通,到底是要幹什麼啊。然後,我就糾結了一個晚上。結果第二天睡醒,一道靈光打進我天靈蓋,突然醒悟了:MDZZ。。。。誰說flask不能寫上傳圖片的功能的。。。而且還想用亞馬遜那個按次收費跑程式碼的服務。。。我二啊,直接把flask部署到伺服器,愛怎麼用就怎麼用了。
我的思路清晰了:
Flask的API就使用用來返回的json。我要把原圖片地址作為引數傳遞給Flask,然後經過裡面的函式處理把圖片上傳,最後返回上傳後的圖片地址給我。
下面是效果圖
IMG_3818.PNG
思路有了,那就開始寫程式碼了
先寫個連線伺服器和上傳功能的utilsutils
import sys import os import oss2 import uuid import requestsclass QssClient(object): def __new__(cls, *args, **kw): if not hasattr(cls, '_instance'): orig = super(QssClient, cls) cls._instance = orig.__new__(cls, *args, **kw) return cls._instance def __init__(self): auth = #認證的秘鑰 endpoint = #伺服器域名 bucket_name =#伺服器的盤名 self.bucket = oss2.Bucket(auth, endpoint, bucket_name, connect_timeout=30) super(QssClient, self).__init__() def upload(self, file_path, dir_name='資料夾名'): file_name = str(uuid.uuid1()) with open(file_path, 'rb') as f: remote = '%s/%s.jpg' % (dir_name, str(file_name)) result = self.bucket.put_object(remote, f) file_url = result.resp.response.url f.close() os.remove(file_path) return file_url def upload_list(self, file_list, dir_name='location'): file_url_list = [] for f in file_list: file_url = self.upload(f, dir_name=dir_name) file_url_list.append(file_url) return file_url_list
然後寫個Flask的runrun
from flask import Flask, jsonify,requestfrom utils import QssClientimport urllibimport os app = Flask(__name__) tasks = [ { 'id': 1, 'image_url': 'url from website', 'ali_url': 'url from ali', 'done': False }, { 'id': 2, 'image_url': 'url from website', 'ali_url': 'url from ali', 'done': False } ]@app.route('/tasks', methods=['GET'])def get_tasks(): return jsonify({'tasks': tasks})@app.route('/pics', methods=['POST'])def create_task(): if not request.json or not 'image_url' in request.json: abort(400) urllib.urlretrieve(request.json['image_url'], 'pics\' + request.json['image_url'].split('/')[-1] )#先儲存圖片到本地 qs = QssClient()#連線伺服器 dir_name = 'location'#設定好伺服器儲存的資料夾 full_file_lis = [] file_path = os.path.join('pics\', request.json['image_url'].split('/')[-1])#從本地的儲存路徑獲得圖片 full_file_lis.append(file_path) url = qs.upload_list(full_file_lis, dir_name)[0]從本地上傳圖片並獲得上傳後的地址 task = { 'id': tasks[-1]['id'] + 1, 'image_url': request.json['image_url'], 'ali_url': url, 'done': False } tasks.append(task) return jsonify({'task': task}), 201#返回圖片地址的json@app.route('/')def index(): return "Hello, World!"if __name__ == '__main__': app.run(debug=True)
把這個API寫完並部署好以後,我突然覺得自己吊吊的。以前沒工作時總聽一些程式設計師前輩說寫API的,原來這就是寫API啊!今天算是第一次啦!
我正洋洋得意的時候,突然聽到外面總經理妹子在哪裡吼“剛才面試的人呢?把他叫回來,忘記讓他做筆試題了!!!”
我弱弱地問“郵箱寄給他不行麼?”
“不現場做,難道讓他回去百度呀?”
我的心裡突然拔涼拔涼的。。。。。你當初不就是直接手機發了份題讓我在家百度的,做完以後直接錄用我的麼?
難道,你不是看上我的才華才請我的?`
作者:LEONYao
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4328/viewspace-2810045/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [python][flask] Flask 圖片上傳與下載例子(支援漂亮的拖拽上傳)PythonFlask
- 我用Electron做了一個圖片上傳的工具——PicGoPicGo
- flask部落格專案之tinymce圖片上傳Flask
- 分享一個看起來很酷的圖片上傳元件元件
- 我需要在Web上完成一個圖片上傳的功能Web
- 通過API介面實現圖片上傳API
- Flask Web開發入門(十)之圖片上傳(使用Flask-Upload)FlaskWeb
- 一個Vue圖片上傳剪裁壓縮元件Vue元件
- 利用微信公眾號提供的官方API上傳圖片獲取永久圖片素材!當圖床用!API圖床
- 我需要在Web上完成一個圖片上傳的功能(+2)Web
- 製作一個複雜通用的圖片上傳介面
- 上傳圖片
- 給picgo上傳的圖片加個水印PicGo
- 如何實現一個簡易的圖片上傳Web ServerWebServer
- 用Python寫一個圖片標註工具Python
- Retrofit+RxJava上傳圖片上傳圖片到後臺RxJava
- 圖片上傳5-多個圖片上傳,獨立專案Demo和原始碼原始碼
- 菜鳥學JS(一)——上傳圖片之上傳前預覽圖片JS
- 【easyui 】上傳圖片UI
- 上傳圖片jsJS
- 我需要在Web上完成一個圖片上傳的功能後續(+1)Web
- PbootCMS上傳圖片變模糊、上傳圖片尺寸受限的解決方案boot
- 編寫還可以的php 圖片上傳類程式碼PHP
- 圖片上傳及圖片處理
- curl上傳圖片的大坑
- 求一個手機多選上傳圖片的好外掛
- 將上傳圖片打上防偽圖片水印並寫入資料庫資料庫
- js中圖片上傳,多次上傳同一張不生效JS
- 京東上傳圖片到JD API 返回值說明API
- 30分鐘編寫一個Flask應用Flask
- php圖片上傳之圖片轉換PHP
- 如何使用 API 的方式給 SAP service cloud Registered product 上傳圖片APICloud
- java,springboot + thymeleaf 上傳圖片、刪除圖片到伺服器、本地,壓縮圖片上傳(有些圖片會失真),原圖上傳JavaSpring Boot伺服器
- 多圖片formpost上傳ORM
- input file圖片上傳
- PHP上傳圖片類PHP
- 圖片檔案上傳
- 測試圖片上傳