InMemoryUploadFile处理

时间:2018-01-30 21:36:55

标签: django file-upload django-rest-framework

我对Django InMemoryUploadedFile处理有疑问。

我尝试上传一个内容如下的简单csv文件

  

用户名,姓名

     

用户1,用户1

我使用下面的代码段来获取文件数据并将其保存在本地(Django REST框架)

def put(self, request, filename, format=None):
    file_obj = request.data['file']
    path = default_storage.save('demo.csv',ContentFile(file_obj.read()))

但是,结果文件包含以下内容:

  

------ WebKitFormBoundaryJaXsjE9oec2QW6jz Content-Disposition:form-data; NAME = “demo.csv”; filename =“demo.csv”Content-Type:text / csv   用户名,用户user1,用户   ------ WebKitFormBoundaryJaXsjE9oec2QW6jz -

我使用react-dropzone Dropzone从前端服务器发送文件。

class UserUpload extends React.Component {
  constructor() {
    super();
    this.onDrop = (acceptedFiles, rejectedFiles) => {
      const file = acceptedFiles[0];
      const payload = superagent.put(`${API_ROOT}/user-upload/${file.name}`).attach(file.name, file);
      payload.end(callback)
    }
  } 

  render() {
    return (
      <Dropzone onDrop={this.onDrop}>
        <p>Drop file here</p>
      </Dropzone>
    )
  }
}

有没有办法只检索csv文件数据而没有上面的页眉和页脚?我的目的是读取csv文件,有没有办法直接读取数据而不先保存? 谢谢。

1 个答案:

答案 0 :(得分:1)

试试此API类,

from rest_framework.views import APIView
from rest_framework.response import Response


class CSVUploadAPI(APIView):
    def post(self, request):
        for file in request.FILES.values():
            with open(file.name, 'wb') as file_obj:
                file_obj.write(file.read())
                file_obj.close()
        return Response("File uploaded")


如果有效,请告诉我。