Source code for api.views.file_upload_view

import json,os
from django.shortcuts import render, redirect
from rest_framework.response import Response
from rest_framework.views import APIView
from django.core.files.storage import FileSystemStorage
from common.utils import *
import coreapi
import time
from rest_framework.parsers import FileUploadParser,MultiPartParser
import shutil

# from rest_framework import status
from master.workflow.data.workflow_data_image import WorkFlowDataImage

[docs]class FileUploadView(APIView): coreapi_fields = ( coreapi.Field( name='file', required=True, type='string', ), )
[docs] def post(self, request, nnid, ver, dir, type=None): """ File Management Rest Service --- # Class Name : FileUploadView # Description: upload actual file via rest api """ try: return_data = {} if len(request.FILES.keys()) > 0: i = 0 return_data_sub = {} for key, requestSingleFile in request.FILES.items(): file = requestSingleFile filepath = get_source_path(nnid, ver, dir) if type != None and type.find("store") >= 0: filepath = get_store_path(nnid, ver, dir) filename = filepath + "/" + file.name # payload = MultipartEncoder({}) # save file on file system if not os.path.exists(filepath): os.makedirs(filepath) j = 1 while os.path.isfile(filename): filename = filepath + "/" + file.name+str(j) j += 1 fp = open(filename,'wb') for chunk in file.chunks(): fp.write(chunk) fp.close() return_data_sub["File"] = "File Create.(" + filename + ")" return_data["File"+str(i)] = return_data_sub i += 1 else : raise Exception("not supported type") return_data = {"status": "200", "result": "fail"} return Response(json.dumps(return_data)) except Exception as e: return_data = None return Response(json.dumps(return_data))
[docs] def get(self, request, nnid, ver, dir, type=None): """ File Management Rest Service --- # Class Name : FileUploadView # Description: Get file counts or file name of given network id and version """ if(type != None): # tmp 임시 저장소의 값을 만들어서 전달해줌. if type.find("tmp") >= 0: tmpfilepath = get_source_path(nnid, ver, "") if type != None and type.find("store") >= 0: tmpfilepath = get_store_path(nnid, ver, "") fileName = time.strftime('%Y%m%d') stand = "1".zfill(10) stcnt = int(fileName + stand) mxcnt = stcnt for i in os.listdir(tmpfilepath): try: if int(i) >= mxcnt: mxcnt = int(i) + 1 if int(i) < stcnt: shutil.rmtree(tmpfilepath + i) except: None mxcnt = str(mxcnt) return_data = {"path":mxcnt} else: return_data = [] tmpfilepath = get_source_path(nnid, ver, dir) if type != None and type.find("store") >= 0: tmpfilepath = get_store_path(nnid, ver, dir) for i in os.listdir(tmpfilepath): resub = {"filename":i} return_data.append(resub) else: return_data = WorkFlowDataImage().get_data_node_info(nnid, ver, dir) return Response(json.dumps(return_data))
[docs] def put(self, request, nnid, ver, dir): """ File Management Rest Service --- # Class Name : FileUploadView # Description: Get file counts or file name of given network id and version """ firsttmpfolder = request.data["first_tmp_folder"] lasttmpfolder = request.data["last_tmp_folder"] tmpfilepath = get_source_path(firsttmpfolder, "1", lasttmpfolder) filepath = get_source_path(nnid, ver, dir) for i in os.listdir(tmpfilepath): shutil.copy2(tmpfilepath+"/"+i, filepath+"/"+i) return_data = {"status": "200", "result": "Success"} return Response(json.dumps(return_data))
[docs] def delete(self, request, nnid, ver, dir): """ File Management Rest Service --- # Class Name : FileUploadView # Description: delete selected upload file """ try: file = request.data["filename"] filepath = get_source_path(nnid, ver, dir) if request.data["type"] != None and request.data["type"].find("store") >= 0: filepath = get_store_path(nnid, ver, dir) filepath = filepath + "/" + file if (os.path.isfile(filepath)): os.remove(filepath) elif (os.path.exists(filepath)): shutil.rmtree(filepath) return_data = {"status": "200", "result": "Success"} return Response(json.dumps(return_data)) except Exception as e: return_data = {"status": "404", "result": str(e)} return Response(json.dumps(return_data))