from django.test import TestCase
 from rest_framework import status
 
-from catalog.packages.biz.nf_package import NfDistributeThread, NfPkgDeleteThread
+from catalog.packages.biz.vnfpackage import NfDistributeThread, NfPkgDeleteThread
 from catalog.pub.database.models import JobStatusModel, JobModel
 from catalog.pub.database.models import VnfPackageModel
 from catalog.pub.msapi import sdc
 from catalog.pub.utils import restcall, toscaparser
 from catalog.pub.config.config import CATALOG_ROOT_PATH
-from catalog.packages.biz.nf_package import VnfpkgUploadThread
+from catalog.packages.biz.vnfpackage import VnfpkgUploadThread
 
 
 class MockReq():
 
 from rest_framework.decorators import api_view
 from rest_framework.response import Response
 
-from catalog.packages.biz import nf_package, ns_package
+from catalog.packages.biz import vnfpackage, ns_package
 from catalog.packages.serializers.catalog_serializers import InternalErrorRequestSerializer
 from catalog.packages.serializers.catalog_serializers import NfPackageDistributeRequestSerializer
 from catalog.packages.serializers.catalog_serializers import NfPackageSerializer
         request.method)
     ret, normal_status, response_serializer, validation_error = None, None, None, None
     if request.method == 'GET':
-        ret = nf_package.nf_get_csars()
+        ret = vnfpackage.nf_get_csars()
         normal_status = status.HTTP_200_OK
         response_serializer = NfPackagesSerializer(data=ret[1])
     elif request.method == 'POST':
         vim_ids = ignore_case_get(request_serivalizer.data, "vimIds")
         lab_vim_id = ignore_case_get(request_serivalizer.data, "labVimId")
         job_id = str(uuid.uuid4())
-        nf_package.NfDistributeThread(
+        vnfpackage.NfDistributeThread(
             csar_id, vim_ids, lab_vim_id, job_id).start()
         ret = [0, {"jobId": job_id}]
         normal_status = status.HTTP_202_ACCEPTED
     ret, normal_status, response_serializer, validation_error = None, None, None, None
 
     if request.method == 'GET':
-        ret = nf_package.nf_get_csar(csar_id)
+        ret = vnfpackage.nf_get_csar(csar_id)
         normal_status = status.HTTP_200_OK
         response_serializer = NfPackageSerializer(data=ret[1])
 
     elif request.method == 'DELETE':
         job_id = str(uuid.uuid4())
-        nf_package.NfPkgDeleteThread(csar_id, job_id).start()
+        vnfpackage.NfPkgDeleteThread(csar_id, job_id).start()
         ret = [0, {"jobId": job_id}]
         normal_status = status.HTTP_202_ACCEPTED
         response_serializer = PostJobResponseSerializer(data=ret[1])
         fun_name(),
         csar_id,
         inputs)
-    ret = nf_package.parse_vnfd(csar_id, inputs)
+    ret = vnfpackage.parse_vnfd(csar_id, inputs)
     logger.info("Leave %s, Return value is %s", fun_name(), ret)
     if ret[0] != 0:
         return Response(
 
 
 import traceback
 import logging
+import os
+
+from catalog.pub.config.config import CATALOG_ROOT_PATH
 from drf_yasg.utils import swagger_auto_schema, no_body
 from rest_framework import status
 from rest_framework.decorators import api_view
 from rest_framework.response import Response
 from catalog.pub.exceptions import CatalogException
+from catalog.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer
 from catalog.packages.serializers.create_vnf_pkg_info_req import CreateVnfPkgInfoRequestSerializer
 from catalog.packages.serializers.vnf_pkg_info import VnfPkgInfoSerializer
-from catalog.packages.biz.vnf_package import create_vnf_pkg, query_multiple
+from catalog.packages.biz.vnf_package import create_vnf_pkg, query_multiple, VnfpkgUploadThread
 
 logger = logging.getLogger(__name__)
 
             logger.error(e.message)
             logger.error(traceback.format_exc())
             return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+
+
+@swagger_auto_schema(
+    method='PUT',
+    operation_description="Upload VNF package content",
+    request_body=no_body,
+    responses={
+        status.HTTP_202_ACCEPTED: "Successfully",
+        status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"
+    }
+)
+@api_view(http_method_names=['PUT'])
+def upload_vnf_pkg_content(request, vnfPkgId):
+    logger.debug("UploadVnf %s" % vnfPkgId)
+    file_object = request.FILES.get('file')
+    upload_path = os.path.join(CATALOG_ROOT_PATH, vnfPkgId)
+    if not os.path.exists(upload_path):
+        os.makedirs(upload_path, 0o777)
+    try:
+        upload_file_name = os.path.join(upload_path, file_object.name)
+        with open(upload_file_name, 'wb+') as dest_file:
+            for chunk in file_object.chunks():
+                dest_file.write(chunk)
+    except Exception as e:
+        logger.error("File upload exception.[%s:%s]" % (type(e), str(e)))
+        logger.error("%s", traceback.format_exc())
+    return Response(None, status.HTTP_202_ACCEPTED)
+
+
+@swagger_auto_schema(
+    method='POST',
+    operation_description="Upload VNF package content from uri",
+    request_body=UploadVnfPackageFromUriRequestSerializer,
+    responses={
+        status.HTTP_202_ACCEPTED: "Successfully",
+        status.HTTP_500_INTERNAL_SERVER_ERROR: "Internal error"
+    }
+)
+@api_view(http_method_names=['POST'])
+def upload_vnf_pkg_from_uri(request, vnfPkgId):
+    try:
+        req_serializer = UploadVnfPackageFromUriRequestSerializer(data=request.data)
+        if not req_serializer.is_valid():
+            raise CatalogException
+        VnfpkgUploadThread(req_serializer.data, vnfPkgId).start()
+        return Response(None, status=status.HTTP_202_ACCEPTED)
+    except CatalogException:
+        logger.error(traceback.format_exc())
+        return Response(data={'error': 'Upload vnfPkg failed.'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
+    except Exception as e:
+        logger.error(e.message)
+        logger.error(traceback.format_exc())
+        return Response(data={'error': 'unexpected exception'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
 
 from rest_framework import status\r
 from rest_framework.views import APIView\r
 from rest_framework.response import Response\r
-from catalog.packages.biz.nf_package import VnfpkgUploadThread\r
+from catalog.packages.biz.vnfpackage import VnfpkgUploadThread\r
 from catalog.pub.exceptions import CatalogException\r
 from catalog.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer\r
 from catalog.packages.serializers.create_vnf_pkg_info_req import CreateVnfPkgInfoRequestSerializer\r
 from catalog.packages.serializers.vnf_pkg_info import VnfPkgInfoSerializer\r
-from catalog.packages.biz.nf_package import create_vnf_pkg, query_multiple\r
+from catalog.packages.biz.vnfpackage import create_vnf_pkg, query_multiple\r
 \r
 logger = logging.getLogger(__name__)\r
 \r