中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

利用Nginx怎么實現一個文件下載功能

發布時間:2020-12-11 15:00:06 來源:億速云 閱讀:1950 作者:Leah 欄目:開發技術

本篇文章為大家展示了利用Nginx怎么實現一個文件下載功能,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

一、配置

http {
 ...
 server: {
 # 配置下載
  location /download {
   root D:\\download;
   autoindex on;
   autoindex_exact_size off;
  }
 }
 ...
}

利用Nginx怎么實現一個文件下載功能

  這是目錄里隨便放的幾個文件,可以看到實現成功。

  這里踩過幾個坑,下面提示下:

1、root路徑配置問題

  剛開始配置的 alias D:\download,報錯:2020/08/14 10:36:06 [emerg] 26396#16140: invalid number of arguments in "alias" directive in D:\Program File\nginx\nginx-1.13.12/conf/nginx.conf:74

  那么查配置 74 行,發現少了分號,加上問題依舊。換成 root D:\download;,報錯:2020/08/14 10:44:20 [emerg] 21376#17156: invalid number of arguments in "root" directive in D:\Program File\nginx\nginx-1.13.12/conf/nginx.conf:74

  問題依舊,后來發現路徑有問題,寫錯了,應該是

root D:/download;
// 或者
root D:\\download;

  原因都懂,就是 \ 只是個轉義字符,要么用 \\,要么就用 /

2、root與alias差別

  ok,這樣配置可以了。但是當我輸入:http://localhost/download/,報錯404,我的D盤目錄下為D:/download/*,然后其他文件

  剛開始報錯:2020/08/14 11:02:49 [error] 9928#12876: *11 CreateFile() "D:\download\/download" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: , request: "GET /download HTTP/1.1", host: "localhost"

  看到這個路徑D:\download\/download這里有問題,所以我把配置rootD:/download/;,后面的 / 去掉了,再試,還是報錯:2020/08/14 11:04:15 [error] 3128#11636: *1 CreateFile() "D:\download/download" failed (2: The system cannot find the file specified), client: 127.0.0.1, server: , request: "GET /download HTTP/1.1", host: "localhost"

  所以考慮到不是路徑的問題,那么問題原因在哪?在于 root 與 alias 配置的區別。

利用Nginx怎么實現一個文件下載功能

  也就是說 當 rootD:/download; 時,你請求http://localhost/download/,他找的是:D:\download\download

  而當 alias D:/download; 時,你請求http://localhost/download/,他找的才是:D:\download

  那么我把我的本地路徑改一下:D:/download/download/*,然后再是其他文件,那么就成功了。

3、中文文件問題

  還有坑,點擊全英文名文件是正常預覽下載的,中文名文件報錯。在 server段中添加 charset utf-8; 也不行,或者 charset gbk,utf-8; 也不行。有清楚的,煩請不吝賜教,謝謝。

  思考良久,應該不是nginx配置的問題了,因為很多地方都說這樣配置就可以顯示中文了。然后我想到會不會是系統編碼問題呢?我用本地做服務器。使用chcp命令查了一下系統編碼,顯示936。一般正常能顯示中文的是936,那說明沒問題。

  雖然中文顯示是正常的,但是**的,一點還是報錯,亂碼或者404。沒辦法直接點擊下載中文名文件,或者瀏覽中文名目錄。

  中文名文件下載可以通過 復制文件名,然后貼在瀏覽器url后面,就可以下載下來了,中文名目錄是真的無法瀏覽!!!

  原因是,windows服務器中文是gbk編碼,nginx的這種頁面的href就是用gbk進行urlencode的,然后一般瀏覽器都是使用utf-8的,當然就沒法訪問了。

4、想防止瀏覽器自動打開文件而不是下載文件,添加

add_header Content-Disposition "attachment;";
// 所有文件都不打開
location / {
 add_header Content-Disposition "attachment;filename*=utf-8'zh_cn'$arg_n";
}

  一般存儲在服務器上的文件都不會用原來的名字,所以下載的時候需要改名,可通過url中添加參數,然后在nginx中根據參數來改名。

  舉例:參數為 n=xxx.jpg

  url:https"//xxxxx?n=xxx.jpg //表示把下載下來的文件名字改為xxx.jpg

  nginx需要配置成

location / {
  if ($request_uri ~* ^.*\?n=([^&]+)$) {
    add_header Content-Disposition "filename*=$arg_n";
  }
}

  注釋:里面的utf-8是有些瀏覽器會自動把文件改成urlencode的格式

  一般1,2都是要一起配置的

location / {
  if ($request_uri ~* ^.*\?n=([^&]+)$) {
    add_header Content-Disposition "attachment;filename*=$arg_n";
  }
}

上述內容就是利用Nginx怎么實現一個文件下載功能,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北海市| 汝州市| 顺义区| 宜兰市| 金山区| 榆社县| 建水县| 房产| 丰都县| 伊通| 旺苍县| 岢岚县| 沅江市| 建水县| 平谷区| 姚安县| 德钦县| 板桥市| 磴口县| 嘉祥县| 巴彦淖尔市| 庆城县| 海晏县| 南郑县| 陇南市| 利川市| 孝昌县| 长汀县| 阿拉善右旗| 丰台区| 福贡县| 綦江县| 西乌珠穆沁旗| 瑞金市| 铁力市| 涿州市| 铜梁县| 满洲里市| 沐川县| 定兴县| 凌云县|