def copyfile(self, source, outputfile): if not self.range: return SimpleHTTPRequestHandler.copyfile(self, source, outputfile) # SimpleHTTPRequestHandler uses shutil.copyfileobj, which doesn't let # you stop the copying before the end of the file. start, stop = self.range # set in send_head() self.copy_byte_range(source, outputfile, start, stop)
def copyfile(self, infile, outfile): """Copies data between two file objects If the current request is a 'Range' request then only the requested bytes are copied. Otherwise, the entire file is copied using SimpleHTTPServer.copyfile """ if not 'Range' in self.headers: SimpleHTTPRequestHandler.copyfile(self, infile, outfile) return start, end = self.range infile.seek(start) bufsize = 64 * 1024 ## 64KB while True: buf = infile.read(bufsize) if not buf: break outfile.write(buf)
def copyfile(self, infile, outfile): """Copies data between two file objects If the current request is a 'Range' request then only the requested bytes are copied. Otherwise, the entire file is copied using SimpleHTTPServer.copyfile """ if 'Range' not in self.headers: SimpleHTTPRequestHandler.copyfile(self, infile, outfile) return start, end = self.range infile.seek(start) bufsize = 64 * 1024 # 64KB remainder = (end - start) % bufsize times = int((end - start) / bufsize) steps = [bufsize] * times + [remainder] for astep in steps: buf = infile.read(bufsize) print('sending', infile, len(buf)) outfile.write(buf) return
def copyfile(self, infile, outfile): """Copies data between two file objects If the current request is a 'Range' request then only the requested bytes are copied. Otherwise, the entire file is copied using SimpleHTTPServer.copyfile """ if 'Range' not in self.headers: SimpleHTTPRequestHandler.copyfile(self, infile, outfile) return start, end = self.range infile.seek(start) bufsize = 64 * 1024 # 64KB while True: buf = infile.read(bufsize) if not buf: break try: outfile.write(buf) except BrokenPipeError: pass