如何使用 Sanic 服务上传的图片?
How to serve uploaded image using Sanic?
我已经使用Sanic成功上传了我项目中某个目录中的图像。我用来上传图片的代码如下:
class ImageUploadAPI(HTTPMethodView):
async def post(self, request):
access_token = get_token_from_header(request.headers)
token = decode_token(access_token)
user_id = token.get('sub')
upload_file = request.files.get('image')
log_path = os.path.join(os.getcwd(), 'pictures')
if not os.path.exists(log_path):
os.makedirs(log_path)
if not upload_file:
res = {'status': 'no file uploaded'}
return json(res, status=404)
# if not valid_file_type(upload_file.name, upload_file.type):
# res = {'status': 'invalid file type'}
# return json(res, status=400)
elif not valid_file_size(upload_file.body):
res = {'status': 'invalid file size'}
return json(res, status=400)
else:
file_path = f"{log_path}/{str(datetime.now())}.{upload_file.name.split('.')[1]}"
await write_file(file_path, upload_file.body)
await apps.db.users.update_one({'_id': ObjectId(user_id)}, {"$set": {
"nid_front": upload_file.name
}})
return json({'status': 'image uploaded successfully'})
在此过程中,我将 upload_file.name
保存在 user
字段中。
现在为上传的图片提供服务,我访问了以下 url(因为我在本地服务器)http://localhost:8000/10414532_479247615552487_2110029531698825823_n.jpg
但它不显示图像而是显示,
Error: Requested URL /10414532_479247615552487_2110029531698825823_n.jpg not found
如何提供上传的图片?
我找到了阅读 Sanic static files 的解决方案。
我使用 blueprint 选项将我上传的图片作为:
static_file_bp = Blueprint('static', url_prefix='/files')
static_file_bp.static('/static', './uploads')
我已经使用Sanic成功上传了我项目中某个目录中的图像。我用来上传图片的代码如下:
class ImageUploadAPI(HTTPMethodView):
async def post(self, request):
access_token = get_token_from_header(request.headers)
token = decode_token(access_token)
user_id = token.get('sub')
upload_file = request.files.get('image')
log_path = os.path.join(os.getcwd(), 'pictures')
if not os.path.exists(log_path):
os.makedirs(log_path)
if not upload_file:
res = {'status': 'no file uploaded'}
return json(res, status=404)
# if not valid_file_type(upload_file.name, upload_file.type):
# res = {'status': 'invalid file type'}
# return json(res, status=400)
elif not valid_file_size(upload_file.body):
res = {'status': 'invalid file size'}
return json(res, status=400)
else:
file_path = f"{log_path}/{str(datetime.now())}.{upload_file.name.split('.')[1]}"
await write_file(file_path, upload_file.body)
await apps.db.users.update_one({'_id': ObjectId(user_id)}, {"$set": {
"nid_front": upload_file.name
}})
return json({'status': 'image uploaded successfully'})
在此过程中,我将 upload_file.name
保存在 user
字段中。
现在为上传的图片提供服务,我访问了以下 url(因为我在本地服务器)http://localhost:8000/10414532_479247615552487_2110029531698825823_n.jpg
但它不显示图像而是显示,
Error: Requested URL /10414532_479247615552487_2110029531698825823_n.jpg not found
如何提供上传的图片?
我找到了阅读 Sanic static files 的解决方案。 我使用 blueprint 选项将我上传的图片作为:
static_file_bp = Blueprint('static', url_prefix='/files')
static_file_bp.static('/static', './uploads')