Extract image from post

main2
Bob Mottram 2019-11-09 21:08:48 +00:00
parent dcc3683133
commit dd5fdfa192
1 changed files with 43 additions and 42 deletions

View File

@ -2686,52 +2686,53 @@ class PubServer(BaseHTTPRequestHandler):
postValue+='\n' postValue+='\n'
postValue+=postLines[line] postValue+=postLines[line]
fields[postKey]=postValue fields[postKey]=postValue
else: if imageLocation>-1:
# directly search the binary array for the beginning # directly search the binary array for the beginning
# of an image # of an image
extensionList=['png','jpeg','gif','mp4','webm','ogv','mp3','ogg'] extensionList=['png','jpeg','gif','mp4','webm','ogv','mp3','ogg']
for extension in extensionList: for extension in extensionList:
searchStr=b'Content-Type: image/png' searchStr=b'Content-Type: image/png'
if extension=='jpeg': if extension=='jpeg':
searchStr=b'Content-Type: image/jpeg' searchStr=b'Content-Type: image/jpeg'
elif extension=='gif': elif extension=='gif':
searchStr=b'Content-Type: image/gif' searchStr=b'Content-Type: image/gif'
elif extension=='mp4': elif extension=='mp4':
searchStr=b'Content-Type: video/mp4' searchStr=b'Content-Type: video/mp4'
elif extension=='ogv': elif extension=='ogv':
searchStr=b'Content-Type: video/ogv' searchStr=b'Content-Type: video/ogv'
elif extension=='mp3': elif extension=='mp3':
searchStr=b'Content-Type: audio/mpeg' searchStr=b'Content-Type: audio/mpeg'
elif extension=='ogg': elif extension=='ogg':
searchStr=b'Content-Type: audio/ogg' searchStr=b'Content-Type: audio/ogg'
imageLocation=postBytes.find(searchStr) imageLocation=postBytes.find(searchStr)
filenameBase= \ filenameBase= \
self.server.baseDir+'/accounts/'+ \ self.server.baseDir+'/accounts/'+ \
nickname+'@'+self.server.domain+'/upload' nickname+'@'+self.server.domain+'/upload'
if imageLocation>-1: if imageLocation>-1:
if extension=='jpeg': imageFound=True
extension='jpg' if extension=='jpeg':
if extension=='mpeg': extension='jpg'
extension='mp3' elif extension=='mpeg':
filename=filenameBase+'.'+extension extension='mp3'
attachmentMediaType= \ filename=filenameBase+'.'+extension
searchStr.decode().split('/')[0].replace('Content-Type: ','') attachmentMediaType= \
break searchStr.decode().split('/')[0].replace('Content-Type: ','')
if filename and imageLocation>-1: break
# locate the beginning of the image, after any if filename and imageLocation>-1:
# carriage returns # locate the beginning of the image, after any
startPos=imageLocation+len(searchStr) # carriage returns
for offset in range(1,8): startPos=imageLocation+len(searchStr)
if postBytes[startPos+offset]!=10: for offset in range(1,8):
if postBytes[startPos+offset]!=13: if postBytes[startPos+offset]!=10:
startPos+=offset if postBytes[startPos+offset]!=13:
break startPos+=offset
break
fd = open(filename, 'wb') fd = open(filename, 'wb')
fd.write(postBytes[startPos:]) fd.write(postBytes[startPos:])
fd.close() fd.close()
else: else:
filename=None filename=None
# send the post # send the post
if not fields.get('message') and not fields.get('imageDescription'): if not fields.get('message') and not fields.get('imageDescription'):