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