繁体   English   中英

通过javascript读取文件并通过ajax传递文件数据后,如何正确编码/解码文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM