国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

c#和pdf.js實現分片預覽pdf

這篇具有很好參考價值的文章主要介紹了c#和pdf.js實現分片預覽pdf。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

源碼如下:

/// <summary>
    /// 文件處理
    /// </summary>
    [RoutePrefix("api/fs")]
    public class FileStoreController : ApiController
    {

        /// <summary>
        /// 文件預覽
        /// </summary>
        /// <param name="filepath">文件路徑</param>
        /// <returns></returns>
        [Description("文件預覽")]
        [HttpGet, Route("preview")]
        public  HttpResponseMessage Preview([Description("文件路徑")] string filepath)
        {
            try
            {
                FileInfo fileInfo = new FileInfo(filepath);
                long fileSize = fileInfo.Length;
                var response = Request.CreateResponse();
                StreamContent content = null;
                // 下載的字節(jié)范圍
                long startByte = 0, endByte = fileSize - 1, totalByte = fileSize;
                if (Request.Headers.TryGetValues("range", out IEnumerable<string> rangeHeader))
                {
                    // 斷點續(xù)傳
                    var rangeString = rangeHeader.FirstOrDefault();
                    var match = Regex.Match(rangeString, @"bytes=(\d+)-(\d+)");
                    // 文件總大小
                    totalByte = fileSize;
                    startByte = long.Parse(match.Groups[1].Value);
                    endByte = long.Parse(match.Groups[2].Value);
                    // 返回http狀態(tài)
                    response.StatusCode = HttpStatusCode.PartialContent;
                    long bytesToRead = endByte - startByte + 1;
                    var contentStream = ReadFileInRange(filepath, startByte, endByte);
                    content = new StreamContent(contentStream);
                    content.Headers.ContentLength = Convert.ToInt32(endByte - startByte + 1);

                }
                else
                {
                    // 文件總大小
                    totalByte = fileSize;
                    // 下載起始位置
                    startByte = 0;
                    // 下載結束位置
                    endByte = totalByte - 1;
                    response.StatusCode = HttpStatusCode.OK;
                    using (var ms = new MemoryStream())
                    {
                        content = new StreamContent(ms);
                    }


                }
                   
                  
                   
                //表明服務器支持分片加載
                response.Headers.AcceptRanges.Add("bytes");
                //Content - Range: bytes 0 - 65535 / 408244,表明此次返回的文件范圍
                content.Headers.ContentRange = new ContentRangeHeaderValue(startByte, endByte, totalByte);
                告知瀏覽器這是一個字節(jié)流,瀏覽器處理字節(jié)流的默認方式就是下載
                content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                response.Content = content;
                //需要設置此屬性,否則瀏覽器默認不會讀取到響應頭中的Accept-Ranges屬性,因此會認為服務器端不支持分片,所以會直接全文下載
                response.Headers.Add("Access-Control-Expose-Headers", "*");
                response.Headers.Add("Access-Control-Allow-Headers", "range,Accept-Ranges,Content-Range,Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN,Cache-Control,If-Modified-Since");
                return response;
            }
            catch (Exception ex)
            {
                return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "服務器內部異常");
            }
        }


        private static MemoryStream ReadFileInRange(string filePath, long startByte, long endByte)
        {
            // 驗證參數
            if (startByte < 0 || endByte < startByte)
            {
                throw new ArgumentException("Invalid byte range");
            }

            try
            {
                using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    // 計算要讀取的字節(jié)數
                    long bytesToRead = endByte - startByte + 1;

                    // 創(chuàng)建緩沖區(qū)
                    byte[] buffer = new byte[bytesToRead];

                    // 將文件流的位置設置為開始字節(jié)
                    fileStream.Seek(startByte, SeekOrigin.Begin);

                    // 讀取字節(jié)到緩沖區(qū)
                    fileStream.Read(buffer, 0, (int)bytesToRead);

                    // 創(chuàng)建一個MemoryStream來存儲讀取的字節(jié)
                    MemoryStream resultStream = new MemoryStream(buffer);

                    return resultStream;
                }
            }
            catch (Exception ex)
            {
                // 在這里處理任何異常,比如文件未找到或讀取錯誤
                Console.WriteLine("Error: " + ex.Message);
                return null;
            }
        }

源代碼github地址:

https://github.com/LeoMingGit/dotNetPractiseCollect/blob/master/%E5%88%86%E7%89%87%E9%A2%84%E8%A7%88pdf/FileStoreController.cs文章來源地址http://www.zghlxwxcb.cn/news/detail-653269.html

到了這里,關于c#和pdf.js實現分片預覽pdf的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 微信小程序實現PDF預覽功能——pdf.js(含源碼解析)

    微信小程序實現PDF預覽功能——pdf.js(含源碼解析)

    前言 前一段時間遇到了一個需求,關于 pdf 文件的預覽,客戶要求如下: 只能在微信小程序內預覽,不能調起本地瀏覽器預覽; 需要讓用戶強制閱讀 10s 后才算閱讀完成,進而進行下一步操作; 用戶不能下載預覽的 pdf 文件; 因為一些原因(此處省略一萬字??),這個項目

    2023年04月09日
    瀏覽(32)
  • vue2 使用pdf.js 實現pdf預覽,并可復制文本

    vue2 使用pdf.js 實現pdf預覽,并可復制文本

    ? ? ? ? 需求:pdf預覽,并且可以選中pdf的內容進行復制。? ? ? ?? ????????在ruoyi的vue前端項目中用到,參考了網上不少文章,因為大部分沒給具體的pdf.js版本,導致運行過程中報各種api 錯誤,經過嘗試以下版本可用,故記錄一下: ? ? ? ? 安裝依賴: ? ? ? ? vue 頁面

    2024年01月19日
    瀏覽(24)
  • 【PDF.js】PDF文件預覽

    【PDF.js】PDF文件預覽

    使用PDFJS實現pdf文件的預覽,支持預覽指定頁、搜索、縮略圖、頁面尺寸調整等等。 官方地址 文檔地址 下載地址 將下載的壓縮包解壓并放入到項目中的public文件夾下,我這里下載的是pdfjs-4.0.379-dist版本,如下 在 pdfjs-4.0.379-dist/web/viewer.mjs 內搜索 throw new Error(“file or

    2024年04月11日
    瀏覽(27)
  • pdf.js預覽pdf文件

    預覽pdf一般通過瀏覽器自帶的pdf預覽器就可以,但有時候需要窗口預覽或自定義操作,可以使用pdf.js操作 pdf.js需要構建后使用,我們可以直接下載安裝pdfjs-dist,這是構建好的版本 這里注意你的環(huán)境,新版本使用了可選鏈,空值合并和私有 class 字段/方法等,如果你的瀏覽器

    2024年02月03日
    瀏覽(28)
  • 利用PDF.js在微信小程序里預覽PDF文件

    在微信小程序可以通過wx.downloadFile 和 wx.openDocument 兩個api下載并打開pdf文件。這種方式主要有不少的缺點: 1、需要下載才可以查看,且每次打開都需要下載生成一個臨時文件,如果PDF文件比較多的話,臨時文件會越來越多,且如果PDF文件比較大的話,打開會比較慢。 2、在導

    2024年02月03日
    瀏覽(29)
  • js下載圖片、pdf等文件,無預覽

    直接使用window.open()或window.locat.href()下載文件遇到圖片或pdf文件就會跳轉預覽頁,不能滿足我想要的點擊直接下載文件到本地的需求,嘗試多次,最終通過以下方法實現了我的需求。 鑒于后端返回的是文件路徑,首先要將文件url地址轉為文件對象,代碼如下: npm install saveA

    2024年02月13日
    瀏覽(40)
  • 使用pdf.js預覽pdf文件時如何兼容chrome66版本

    最近在做一個需求,在PC端實現預覽pdf文件的功能,但是要最低兼容chrome的66版本,因為公司用的chrome瀏覽器最低版本就是66版本。 現在下載PDF.js (鏈接:https://mozilla.github.io/pdf.js/) 下載下來的版本是 v3.11.174 ,都是已經構建好的。 我先拿 v3.11.174 這個版本試了一下,發(fā)現在

    2024年02月07日
    瀏覽(27)
  • vue或uniapp使用pdf.js預覽

    vue或uniapp使用pdf.js預覽

    一、先下載穩(wěn)定版的pdf.js,可以去官網下載??官網下載地址? 或??pdf.js包下載(已配置好,無需修改) 二、下載好的pdf.js文件放在public下靜態(tài)文件里,?uniapp是放在?static下靜態(tài)文件里 三、使用方式 ? ?1. vue項目?注意路徑? :src=\\\"`static/pdfjs-1.9/web/viewer.html?file=你的pdf路徑 ?2.

    2024年02月13日
    瀏覽(39)
  • vue+pdf.js預覽本地pdf文件(可以復制文本,滾動頁碼展示)

    vue+pdf.js預覽本地pdf文件(可以復制文本,滾動頁碼展示)

    1、安裝pdfjs-dist插件,推薦使用2.0.943這個版本 2、頁面中引入使用 3、頁面標簽 3、解析pdf,獲取pdf所有頁數據,使用canvas渲染,并使用TextLayerBuilder創(chuàng)建文本層,可以復制文本信息 在渲染pdf數據時,當pdf文件很大渲染量很多時,會導致頁面卡住,無法執(zhí)行其他操作;這涉及到

    2024年01月21日
    瀏覽(28)
  • 【vue2中的pdf預覽】iframe/pdf.js/vue-pdf

    vue2中預覽pdf的方法有pdf.js和vue-pdf等。下面進行簡單對比使用方法的介紹。 使用iframe預覽pdf 如果后端返回的不是url,那么需要使用 responseType = \\\'blob\\\' 來讀取后端傳來的內容。 擴展: 同樣是使用iframe進行預覽,如果有 其他格式 如word/xls/ppt/txt的文件需要預覽,可以使用微軟解

    2024年02月09日
    瀏覽(75)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包