MCPcopy
hub / github.com/valyala/fasthttp / newCompressedFSFileCache

Method newCompressedFSFileCache

fs.go:1767–1835  ·  view source on GitHub ↗

newCompressedFSFileCache use memory cache compressed files.

(f fs.File, fileInfo fs.FileInfo, filePath, fileEncoding string)

Source from the content-addressed store, hash-verified

1765
1766// newCompressedFSFileCache use memory cache compressed files.
1767func (h *fsHandler) newCompressedFSFileCache(f fs.File, fileInfo fs.FileInfo, filePath, fileEncoding string) (*fsFile, error) {
1768 var (
1769 w = &bytebufferpool.ByteBuffer{}
1770 err error
1771 )
1772
1773 switch fileEncoding {
1774 case "br":
1775 zw := acquireStacklessBrotliWriter(w, CompressDefaultCompression)
1776 _, err = copyZeroAlloc(zw, f)
1777 if errf := zw.Flush(); err == nil {
1778 err = errf
1779 }
1780 releaseStacklessBrotliWriter(zw, CompressDefaultCompression)
1781 case "gzip":
1782 zw := acquireStacklessGzipWriter(w, CompressDefaultCompression)
1783 _, err = copyZeroAlloc(zw, f)
1784 if errf := zw.Flush(); err == nil {
1785 err = errf
1786 }
1787 releaseStacklessGzipWriter(zw, CompressDefaultCompression)
1788 case "zstd":
1789 zw := acquireStacklessZstdWriter(w, CompressZstdDefault)
1790 _, err = copyZeroAlloc(zw, f)
1791 if errf := zw.Flush(); err == nil {
1792 err = errf
1793 }
1794 releaseStacklessZstdWriter(zw, CompressZstdDefault)
1795 }
1796 defer func() { _ = f.Close() }()
1797
1798 if err != nil {
1799 return nil, fmt.Errorf("error when compressing file %q: %w", filePath, err)
1800 }
1801
1802 seeker, ok := f.(io.Seeker)
1803 if !ok {
1804 return nil, errors.New("not implemented io.Seeker")
1805 }
1806 if _, err = seeker.Seek(0, io.SeekStart); err != nil {
1807 return nil, err
1808 }
1809
1810 ext := fileExtension(fileInfo.Name(), false, h.compressedFileSuffixes[fileEncoding])
1811 contentType := mime.TypeByExtension(ext)
1812 if contentType == "" {
1813 data, err := readFileHeader(f, false, fileEncoding)
1814 if err != nil {
1815 return nil, fmt.Errorf("cannot read header of the file %q: %w", fileInfo.Name(), err)
1816 }
1817 contentType = http.DetectContentType(data)
1818 }
1819
1820 dirIndex := w.B
1821 lastModified := fileInfo.ModTime()
1822 ff := &fsFile{
1823 h: h,
1824 dirIndex: dirIndex,

Callers 1

compressAndOpenFSFileMethod · 0.95

Calls 12

copyZeroAllocFunction · 0.85
fileExtensionFunction · 0.85
readFileHeaderFunction · 0.85
AppendHTTPDateFunction · 0.85
FlushMethod · 0.65
CloseMethod · 0.65

Tested by

no test coverage detected