如何将Django2中InMemoryUploadedFile的内容转换为字符串?
嘿,这个问题我熟!Django里的InMemoryUploadedFile本质是个类文件对象,处理起来很简单,我给你两种靠谱的方案:
方案一:直接转成字符串(满足你的
convert2string需求) 因为InMemoryUploadedFile继承了Django的File类,支持标准的文件读取操作,你只需要读取字节内容再解码成字符串就行,XML文件一般用UTF-8编码,所以代码可以这么写:
def convert2string(uploaded_file): # 读取文件字节流,解码为UTF-8字符串,编码可根据你的XML实际情况调整 return uploaded_file.read().decode('utf-8')
用的时候就像你写的那样:
uploaded_file = request.FILES['file'] my_xml = convert2string(uploaded_file) obj = MyObject() parser = MyContentHandler(obj) xml.sax.parseString(my_xml, parser)
方案二:更高效的直接解析(跳过字符串转换)
其实xml.sax.parse()方法本身就支持接收类文件对象,你完全不用把文件转成字符串,直接传入uploaded_file就行,这样还能避免大文件占用过多内存,代码更简洁:
uploaded_file = request.FILES['file'] obj = MyObject() parser = MyContentHandler(obj) # 直接传入类文件对象,省掉转字符串的步骤 xml.sax.parse(uploaded_file, parser)
两种方案都能用,如果你必须要字符串做中间处理就用第一种,追求效率的话选第二种准没错~
内容的提问来源于stack exchange,提问作者Kohei TAMURA
相关产品推荐
相关产品推荐

