1. 程式人生 > >判斷使用者許可權後,如何高效的提供檔案下載

判斷使用者許可權後,如何高效的提供檔案下載

問題:某些檔案只希望特定使用者可以下載,那麼下載之前必須進行許可權判斷。判斷通過時,跳轉到被下載檔案的真實地址肯定不行,這相當於沒有做許可權限制了。一般的做法是讀取被下載的檔案然後輸出給使用者。在這個過程中動態語言幹了一件吃力不討好的事情,轉了一個彎讀取資料然後在交給web伺服器輸出,多消耗了資源還可能降低下載速度。

對於此問題,我曾一度糾結,後來才發現web伺服器有一個X-Sendfile的特性,可以很完美的解決這個問題。今天記錄下以備將來檢視。

X-Sendfile特性的基本原理,就是動態語言傳送一個特殊的http header指令,這個指令只能被web伺服器獲取和識別,不會發送到使用者端。其作用就是告訴web伺服器一個檔案路徑,讓其把這個檔案傳送給使用者。不同web伺服器可能有些差別,但幾個常見的web伺服器都支援這個特性。

以php為例

在Apache中可以這樣寫:

<?php
//.....
//許可權判斷通過
header("X-Sendfile: /download/thaiki.exe");

更詳細的說明請看惠新宸部落格

若是nginx

<?php
//.....
//許可權判斷通過
header('X-Accel-Redirect: /download/thaiki.exe');
更詳細可以參考這篇博文

相關推薦

判斷使用者許可權如何高效提供檔案下載

問題:某些檔案只希望特定使用者可以下載,那麼下載之前必須進行許可權判斷。判斷通過時,跳轉到被下載檔案的真實地址肯定不行,這相當於沒有做許可權限制了。一般的做法是讀取被下載的檔案然後輸出給使用者。在這個過程中動態語言幹了一件吃力不討好的事情,轉了一個彎讀取資料然後在交給web

electron-vue應用build開啟exe檔案安裝成功開啟應用報錯

 問題描述:      2.解決方法: import {app, BrowserWindow, Menu, ipcMain, Tray,nativeImage} from 'electron' const path =

vuecli開發專案檔案打包appjs/vendorjs檔案過大

專案上線後,瀏覽器第一次載入會特別特別慢,network中看到vendorjs檔案1.9M,不慢才怪。 echarts按需引入後,也有1.1M左右,由於對vue腳手架理解不深,自己扒了大量的文件,又測 試了很多次,才測試成功,暫時簡單記錄下。 npm run build --report 可

打不開檔案“C:\Program Files\ubuntu\ubuntu\Ubuntu 64 位.vmdk”: 許可權不足無法訪問檔案

使用管理員許可權開啟虛擬機器,一般都可以解決。 補充: 1、無法連線   解決方法:以管理員身份執行此軟體。     2、使用vmware提示:無法開啟核心裝置 \\.\Global\vmx86: 系統找不到指定的檔案

C# 匯出excel刪除該檔案提示 正由另一程序使用因此該程序無法訪問此檔案

原始碼 path = Server.MapPath("~/TemporaryFile/"); if (false == System.IO.Directory.Exists(path)) { System.IO.Directory.CreateDirectory(p

vs2012 升級到Update 4開啟cpp檔案 彈出 “Visual Studio 遇到了異常。這個可能是由某個擴充套件導致的”

百度了很久,都是說要將登錄檔 [HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{73B7DC00-F498-4ABD-AB79-D07AFD52F395}\InProcServer32] 預設值修改為: C:\Program Files (x8

android 混淆反射R檔案內部類報錯

專案中由於用到了下面方法來 反射R檔案獲取layout的佈局id。但是混淆後,發現報錯 android.content.res.Resources$NotFoundException: Resource ID #0x0 經過網上查詢都是在 proguard-r

ubuntu 刪除軟體清理配置檔案

今天清理一下系統,使用了一個命令列,可能對其他人有參考價值   dpkg -l |grep "^rc"|awk '{print $2}' |xargs aptitude -y purge   用途:   刪除已經刪除的軟體包的殘留配置檔案。因為 debian 中 remov

Linux資料夾許可權777無法建立檔案

問題描述 在linux系統中,使用mysql匯出csv檔案,預設資料夾是/tmp目錄,可以匯出成功,然後我在/tmp/下面建立了一個lx目錄,並將/tmp/lx的許可權設定為777,也就是/tmp與/tmp/lx的許可權都是777,再將mysql資料匯出到lx

android反編譯APK是smali檔案能反編譯成dex檔案

我也面臨相同的問題,但目前還沒找到類似反編譯smali檔案的方法,一般得到dex檔案只需要用WinRAR或其他壓縮軟體開啟apk檔案就能得到。但也有例外好像,技術先進了,今天遇到個apk用WinRAR開啟異常,沒有dex檔案,所以得到原始碼的計劃就泡影了,至少用目前常規的方

檔案操作檔案操作時的許可權設定快速實現檔案拷貝C語言常用IO函式

定義一個檔案型別指標。用於儲存開啟檔案後的指標。 C語言中可以用 gets(char *str) 來輸入一行(包括空格)。 FILE *p = fopen("檔名",“開啟的許可權”); 其中許可權可以是w ,此時如果檔案不存在會自動建立,如果存在就會自動覆蓋(內容); 許

aiohttp web方式提供檔案下載服務

python3.6使用了aiohttp, aiofiles庫,非同步操作服務端程式碼如下,啟動服務後,預設監聽0.0.0.0:8080沒有做任何異常處理,適用於小檔案,僅供參考 file_server.py: import aiofiles import asyncio import os from ai

小程式新增業務域名校驗檔案下載到伺服器問題

在填寫業務域名時,小程式要求咱們下載他們的校驗檔案,放到根目錄,通常是沒有問題,滿足能夠訪問,確定放在根目錄下就行 以下是域名繫結小程式的注意事項: 一個域名只能繫結20個小程式 域名可以是子

前端資料傳到後臺動態生成Excel檔案提供檔案下載

需求描述: 需要將前端的某些資料生成Excel檔案,並提供下載功能。 解決方案: 前端通過ajax的方式將資料資訊傳到後臺,後臺使用POI元件動態生成Excel檔案流,並寫入資料資訊,返回前端供前端下載。 程式碼示例:

讓PHP更快的提供檔案下載

一般來說, 我們可以通過直接讓URL指向一個位於Document Root下面的檔案, 來引導使用者下載檔案. 但是, 這樣做, 就沒辦法做一些統計, 許可權檢查, 等等的工作. 於是, 很多時候, 我們採用讓PHP來做轉發, 為使用者提供檔案下載. <?php

解決使用IE瀏覽器進行上傳(ajaxFileUpload)瀏覽器會提示下載的問題(踩坑記錄)

最近做一個上傳功能,前端使用的是ajaxFileUpload,後臺程式碼不規範,response沒有設定contentType,除了chome之外,firefox和IE瀏覽器都會報錯,即能進入後臺服務正常進行業務邏輯,但是返回都落在error:function{ }裡。由於後

samba伺服器經windows共享虛擬機器中檔案許可權nobodynogroup

前幾天想共享檔案到虛擬機器的ubuntu結果新建的網路對映一會能看到共享資料夾但無開啟許可權一會直接連線不上,畢竟是新手只能百度試了病急亂投醫N種方法仍然不能解決對於有強迫症的我弄了將近2個多小時依然沒有解決於是(惱羞成怒)吧samba的程式解除安裝了(在應用程式歷解除安裝

nginx實驗---lnmp實現多個虛擬主機部署wordpress和phpmyadmin並為一個主機提供https

nginx php mariadb ca httpslnmp實現多個虛擬主機,部署wordpress和phpmyadmin,並為後一個主機提供https。 一、安裝nginx 方法一:編譯安裝1.下載nginx程序包,傳導至CentOS主機中,並解壓。2.進入解壓目錄3.~]# ./configure -

【樹莓派】關於樹莓派2代更新最新核心DS18B20溫度感測器無法找到對應檔案的問題的解決

樹莓派採用DS18B20檢測環境溫度! 在網上關於DS18B20溫度感測器的教程有很多,但大部分都是基於老版本核心的例子。在入手樹莓派2代後,加上DS18B20,按照他們的方法就是找不到對應的28-****檔案,在經過幾天研究實驗,以及查閱相關資料後。發現官方給出的說法是:升級新核心之後,防

記錄Android開發一個小坑佈局檔案TextView中新增onClick點選無效問題

自己寫東西的時候,在TextView上添加了onClick去增加點選事件,去跳轉另一個Activity,執行後結果點選無效,新增Toast,Toast也不顯示,程式碼如下: <TextView android:layout_width="wrap_content"