如何使用django rest框架上传带有非ascii文件名的文件

时间:2016-12-12 08:27:49

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

我正在使用Django Rest Framework 3.4.4和Django 1.10。 这是客户端的发布请求:

$http.post(fileUrl, fd, {
    withCredentials: true,
    transformRequest: angular.identity,
    headers: {
        'Content-Type': undefined
    }
}).success(function(data) {
....

在服务器端,我有以下内容:

def post(self, request, format=None):
    file_ids = []
    file_list = request.FILES.getlist('file_path')
    for file in file_list:
        serializer = FileSerializer(data={'file_path': file})
        if serializer.is_valid():
            serializer.save()
....

使用filname如foo.pdf正确上传文件。但是当文件名包含例如亚美尼亚字母:ա.pdf时,我收到了UnicodeEncodeError错误: UnicodeEncodeErrorTraceback

2 个答案:

答案 0 :(得分:0)

这很可能意味着您没有设置系统语言变量。

某些应用程序 - 例如主管 - 有助于运行Django项目,不会考虑默认系统。你有时需要自己设置它。

很可能你会失踪:

  • LANG =" C.UTF-8"
  • LC_ALL =" C.UTF-8"
  • LC_LANG =" C.UTF-8"

例如。

答案 1 :(得分:0)

您还可以在模型的保存方法上尝试slugify文件名。您可以找到如何从here覆盖模型的保存方法。想法是在保存对象之前,更改文件名。而不是“ա.pdf”,slugify可能会将其更改为“w.pdf”。你也可以添加
# -*- coding: utf-8 -*- 在您的视图顶部,如this example