upload_apk.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import os
  2. from rest_framework.views import APIView
  3. from rest_framework.response import Response
  4. from rest_framework.parsers import FileUploadParser
  5. from kedong.settings import MEDIA_ROOT
  6. import time
  7. import logging
  8. from datetime import datetime
  9. from django.conf import settings
  10. from smartfarming.models.agriculture import APKLogs
  11. from smartfarming.serializers.apk_serializers import APKLogsSerializers
  12. config = settings.CONFIG
  13. logger = logging.getLogger("myapp")
  14. class NewUploadAPIView(APIView):
  15. # 上传apk文件
  16. def post(self, request):
  17. server_web = config.get("server_web")
  18. local_path = os.path.join(MEDIA_ROOT, "app")
  19. os.mkdir(local_path) if not os.path.exists(local_path) else None
  20. file_obj = request.data['file']
  21. if file_obj.size > 1024 * 1024 * 200:
  22. return Response({"code": 2, "msg": "请上传小于200M文件"})
  23. try:
  24. proxy_front = f'{server_web}/media/app'
  25. stamp = datetime.now().strftime("%Y-%m-%d-%H-%M-%S")
  26. file_name = "kedong." + ((file_obj.name).split("."))[-1]
  27. file = os.path.join(local_path, file_name)
  28. old_file_name = f"{str(stamp)}-{file_name}"
  29. real_url = os.path.join(local_path, old_file_name)
  30. if os.path.exists(file):
  31. os.rename(file, real_url)
  32. download_url = f"{proxy_front}/{old_file_name}"
  33. app = APKLogs.objects.all().order_by("-upltime")
  34. if app:
  35. app = app.first()
  36. app.history_apk = download_url
  37. app.save()
  38. with open(file, 'wb') as f:
  39. for chunk in file_obj.chunks():
  40. f.write(chunk)
  41. url = f'{proxy_front}/{file_name}'
  42. return Response({"url": url, "old_url": download_url, "code": 0, "msg": "success"})
  43. except Exception as e:
  44. logger.error(e)
  45. return Response({"code": 2, "msg": "APK保存失败,请检查或重试"})
  46. class APKUploadView(APIView):
  47. # 保存app信息
  48. def post(self, request):
  49. try:
  50. request_data = request.data
  51. apk = request_data.get('apk')
  52. history_qr_code = request_data.get('history_qr_code')
  53. mark = request_data.get("mark")
  54. app = APKLogs()
  55. app.history_apk = apk if apk else ""
  56. app.history_qr_code = history_qr_code if history_qr_code else ""
  57. app.mark = mark if mark else ""
  58. app.upltime = int(time.time())
  59. app.save()
  60. return Response({"code": 0, "msg": "success"})
  61. except Exception as e:
  62. logger.error(e)
  63. return Response({"code": 1, "msg": "保存失败"})
  64. class APPListAPIView(APIView):
  65. # app信息列表
  66. def post(self, request):
  67. queryset = APKLogs.objects.all().order_by("-upltime")
  68. serializers = APKLogsSerializers(queryset, many=True)
  69. return Response({"code": 0, "msg": "success", "data": serializers.data})