Updated to handle file upload

This commit is contained in:
Devoalda 2023-10-23 12:38:37 +08:00
parent de103880cf
commit c72af2167d
3 changed files with 66 additions and 73 deletions

View File

@ -1,22 +0,0 @@
# Generated by Django 4.2.5 on 2023-10-23 03:37
from django.db import migrations, models
import uuid
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='File',
fields=[
('key', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
('value', models.BinaryField()),
],
),
]

View File

@ -0,0 +1,23 @@
import requests
import json
url = "http://127.0.0.1:8000/api/files/"
file = {'file': open('test.text', 'rb')}
r = requests.post(url, files=file)
# Print response message
print(json.dumps(r.json(), indent=4))
key = r.json()['key']
url = "http://127.0.0.1:8000/api/files/" + key + "/"
r = requests.get(url)
file = r.json()['file']
# Change file to bytes
file = bytes(file, 'utf-8')
# Write response('file') to disk
with open('test2.text', 'wb') as f:
f.write(file)

View File

@ -1,14 +1,9 @@
import json
from django.conf import settings
import redis
import base64
import uuid
from rest_framework.decorators import api_view
from rest_framework import status
from rest_framework.response import Response
# from safeshare_app.models.file import File
# from safeshare_app.serializers.file import FileSerializer
import redis
from django.conf import settings
from rest_framework.decorators import api_view
from rest_framework.response import Response
redis_instance = redis.StrictRedis(host=settings.REDIS_HOST,
port=settings.REDIS_PORT, db=0)
@ -17,27 +12,23 @@ redis_instance = redis.StrictRedis(host=settings.REDIS_HOST,
@api_view(['GET', 'POST'])
def manage_items(request, *args, **kwargs):
if request.method == 'GET':
items = {}
count = 0
for key in redis_instance.keys("*"):
items[key.decode("utf-8")] = redis_instance.get(key)
count += 1
response = {
'count': count,
'msg': f"Found {count} items.",
'items': items
}
return Response(response, status=200)
if request.method == 'POST':
item = json.loads(request.body)
key = uuid.uuid4().hex
value = item['value']
# Not supposed to enumerate all items, so return 405
return Response({
'msg': 'Method not allowed'
}, status=405)
if request.method == 'POST':
key = uuid.uuid4().hex
file = request.FILES['file']
filename = 'file.txt'
# Convert file to bytes
file = file.read()
redis_instance.set(key, file)
# Modify value to binary object (base64)
value = base64.b64encode(value.encode('utf-8'))
redis_instance.set(key, value)
response = {
'msg': f"{key} successfully set to {value}"
'key': key,
'msg': f"{key} successfully set to {filename}: {file}"
}
return Response(response, 201)
@ -50,38 +41,39 @@ def manage_item(request, *args, **kwargs):
if value:
response = {
'key': kwargs['key'],
'value': value,
'file': value,
'msg': 'success'
}
return Response(response, status=200)
else:
response = {
'key': kwargs['key'],
'value': None,
'msg': 'Not found'
}
return Response(response, status=404)
elif request.method == 'PUT':
if kwargs['key']:
request_data = json.loads(request.body)
new_value = request_data['value']
value = redis_instance.get(kwargs['key'])
if value:
redis_instance.set(kwargs['key'], new_value)
response = {
'key': kwargs['key'],
'value': value,
'msg': f"Successfully updated {kwargs['key']}"
}
return Response(response, status=200)
else:
response = {
'key': kwargs['key'],
'value': None,
'file': None,
'msg': 'Not found'
}
return Response(response, status=404)
# elif request.method == 'PUT':
# if kwargs['key']:
# request_data = json.loads(request.body)
# new_value = request_data['value']
# value = redis_instance.get(kwargs['key'])
# if value:
# redis_instance.set(kwargs['key'], new_value)
# response = {
# 'key': kwargs['key'],
# 'file': value,
# 'msg': f"Successfully updated {kwargs['key']}"
# }
# return Response(response, status=200)
# else:
# response = {
# 'key': kwargs['key'],
# 'value': None,
# 'msg': 'Not found'
# }
# return Response(response, status=404)
elif request.method == 'DELETE':
if kwargs['key']:
result = redis_instance.delete(kwargs['key'])
@ -93,7 +85,7 @@ def manage_item(request, *args, **kwargs):
else:
response = {
'key': kwargs['key'],
'value': None,
'file': None,
'msg': 'Not found'
}
return Response(response, status=404)