Используя модуль poster.encode, это работает, когда я публикую весь файл в Solr:
f = open(filePath, 'rb')
datagen, headers = multipart_encode({'file': f})
# use wt=json because it's more convenient to navigate
request = urllib2.Request(SOLR_BASE_URL + 'update/extract?extractOnly=true&extractFormat=text&indent=true&wt=json', datagen, headers) # assumes solrPath ends in '/'
extracted = urllib2.urlopen(request).read()
Однако для некоторых файлов я хотел бы отправить только первые n байтов файлов. Я думал, что это будет работать:
f = open(filePath, 'rb')
mp = MultipartParam('file', fileobj=f, filesize=f)
datagen, headers = multipart_encode({'file': mp})
# use wt=json because it's more convenient to navigate
request = urllib2.Request(SOLR_BASE_URL + 'update/extract?extractOnly=true&extractFormat=text&indent=true&wt=json', datagen, headers) # assumes solrPath ends in '/'
extracted = urllib2.urlopen(request).read()
... но я получаю запрос на тайм-аут (и странно, что мне нужно перезапустить apache, прежде чем запросы в мое приложение web2py снова заработают). Я получаю сообщение об ошибке «http 400 content missing» от urlopen (), когда я опускаю аргумент размер файла. Я просто неправильно использую MultipartParam?
(Смысл всего этого в том, что я использую Solr для извлечения текстового содержимого и метаданных из файлов. Для видео и аудио файлов я хотел бы избежать отправки только первых 100-300 тыс. предположительно все соответствующие данные находятся в заголовках файлов.)