[英]How do I encode/decode a file correctly after reading it through javascript and pass the file data through ajax?
我有一个django File字段,其中多个属性设置为true。 我试图做一个多文件上传器,在这里我用一个简单的javascript FileReader对象获得文件对象。 遍历文件列表后,我通过读取文件数据
reader.readAsBinaryString(file);
并获得所需的文件数据结果。 通过ajax将这些数据传递到我的视图后,我试图将文件的副本创建到media文件夹中。 我目前正在使用以下视图功能:
@csrf_exempt
def storeAttachment(data):
'''
stores the files in media folder
'''
data = simplejson.loads(data.raw_post_data)
user_org = data['user_org']
fileName = data['fileName']
fileData = data['fileData']
file_path = MEDIA_ROOT + 'icts_attachments/'
try:
path = open((file_path+ str(user_org) + "_" + '%s')%fileName, "w+")
path.write(fileData)
path.close()
return HttpResponse(1)
except IOError:
return HttpResponse(2)
我能够编写简单的文本文件,.js,.html和其他几种格式,但是当我尝试上载pdf,word,excel,rar格式时,即使保存了无效数据文件,我在响应中也遇到以下错误我的媒体路径(该文件无法打开)。
'ascii' codec can't encode characters in position 41-42: ordinal not in range(128)
我尝试使用各种引用对文件数据进行编码/解码,但没有效果。任何建议将不胜感激。
由于使用Python 2
的默认ASCII编码,因此出现错误。 大于127的字符会导致异常,因此请使用str.encode
将Unicode编码为文本/字节。
优良作法是在处理文件对象时with
关键字一起使用。
path = u''.join((file_path, user_org, '_', fileName)).encode('utf-8')
with open(path, 'w+') as f:
f.write(fileData)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.