我正在定义bottle
api,我需要从客户端接受一个文件,然后将该文件保存到本地系统上的HDFS。
代码看起来像这样。
@route('/upload', method='POST')
def do_upload():
import pdb; pdb.set_trace()
upload = request.files.upload
name, ext = os.path.splitext(upload.filename)
save_path = "/data/{user}/{filename}".format(user=USER, filename=name)
hadoopy.writetb(save_path, upload.file.read())
return "File successfully saved to '{0}'.".format(save_path)
问题是,request.files.upload.file
是cStringIO.StringO
类型的对象,可以使用str
方法转换为.read()
。但是hadoopy.writetb(path, content)
期望内容是其他格式,服务器会坚持这一点。它不会给出异常,它不会给出错误或任何结果。就好像它处于无限循环中一样站在那里。
有谁知道如何将传入的文件写入瓶子API到HDFS?
答案 0 :(得分:0)
从hadoopy documentation开始,看起来int
的第二个参数应该是可迭代的对;但你传递的是字节数。
... hadoopy.writetb命令,它接受键/值对的迭代器......
你试过传递一对吗?而不是你在做什么,
writetb
试试这个:
hadoopy.writetb(save_path, upload.file.read()) # 2nd param is wrong
(我不熟悉Hadoop,所以我不清楚hadoopy.writetb(save_path, (path, upload.file.read()))
的语义是什么,但可能对知道HDFS的人有意义。)