在django rest框架中上载临时文件
我正在尝试创建一种上传xlsx文件的方法,然后使用芹菜执行一些操作 我在想:在django rest框架中上载临时文件,django,file-upload,django-rest-framework,temporary-files,Django,File Upload,Django Rest Framework,Temporary Files,我正在尝试创建一种上传xlsx文件的方法,然后使用芹菜执行一些操作 我在想: 上载文件并临时保存的视图 使用芹菜来执行我想要的文件,然后删除它 我正在尝试这样做: class ImportMyFileView(APIView): 解析器\类=(FileUploadParser,) def post(self、request、filename、format=None): my_file=request.data[“file”] 以open(f“/tmp/{my_file.name}”、“wb+
- 上载文件并临时保存的视图
- 使用芹菜来执行我想要的文件,然后删除它
class ImportMyFileView(APIView):
解析器\类=(FileUploadParser,)
def post(self、request、filename、format=None):
my_file=request.data[“file”]
以open(f“/tmp/{my_file.name}”、“wb+”)作为目标:
对于my_文件中的chunk.chunks():
destination.write(块)
#在这里叫芹菜
...
归还某物
我可以在我想要的地方生成文件,但问题是当我打开xlsx时。我在这里得到:
--X-BOUNDARY
内容配置:表单数据
内容类型:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
PK以下是我将如何使用DRF的内置功能:
import os
from rest_framework import serializers
from django.core.files.storage import FileSystemStorage
class UploadSerializer(serializers.Serializer):
file = serializers.FileField()
class UploadView(APIView):
...
def post(self, request):
ser = UploadSerializer(request.data)
ser.is_valid(raise_exception=True)
fs = FileSystemStorage(tempfile.gettempdir())
file_name = fs.save(content=ser.validated_data['file'])
full_path = os.path.join(fs.location, file_name)
celery_func.delay(file_name=full_path)
return Response("Upload OK")
更可靠的方法是创建一个模型来表示要处理和使用的上传
一旦这种方法奏效,您就可以研究单独使用或与组合使用。不过,这是一个更大的学习曲线。以下是我将如何做到这一点,依靠DRF的内置功能:
import os
from rest_framework import serializers
from django.core.files.storage import FileSystemStorage
class UploadSerializer(serializers.Serializer):
file = serializers.FileField()
class UploadView(APIView):
...
def post(self, request):
ser = UploadSerializer(request.data)
ser.is_valid(raise_exception=True)
fs = FileSystemStorage(tempfile.gettempdir())
file_name = fs.save(content=ser.validated_data['file'])
full_path = os.path.join(fs.location, file_name)
celery_func.delay(file_name=full_path)
return Response("Upload OK")
更可靠的方法是创建一个模型来表示要处理和使用的上传
一旦这种方法奏效,您就可以研究单独使用或与组合使用。不过,这是一个更大的学习曲线