]> OzVa Git service - ozva-cloud/commitdiff
fix: downloaded zip file has no.zip ext in firefox
authorsigoden <sigoden@gmail.com>
Tue, 31 May 2022 06:39:07 +0000 (14:39 +0800)
committersigoden <sigoden@gmail.com>
Tue, 31 May 2022 06:39:07 +0000 (14:39 +0800)
close #2

src/server.rs

index 5959b18d03c0cd899727229c4d712510e96ef087..a317fb23c5620d7a9241dc9e31a68faebb4476ee 100644 (file)
@@ -10,7 +10,9 @@ use headers::{
     AccessControlAllowHeaders, AccessControlAllowOrigin, ContentRange, ContentType, ETag,
     HeaderMap, HeaderMapExt, IfModifiedSince, IfNoneMatch, IfRange, LastModified, Range,
 };
-use hyper::header::{HeaderValue, ACCEPT, CONTENT_TYPE, ORIGIN, RANGE, WWW_AUTHENTICATE};
+use hyper::header::{
+    HeaderValue, ACCEPT, CONTENT_DISPOSITION, CONTENT_TYPE, ORIGIN, RANGE, WWW_AUTHENTICATE,
+};
 use hyper::service::{make_service_fn, service_fn};
 use hyper::{Body, Method, StatusCode};
 use percent_encoding::percent_decode;
@@ -271,6 +273,7 @@ impl InnerService {
 
     async fn handle_zip_dir(&self, path: &Path, res: &mut Response) -> BoxResult<()> {
         let (mut writer, reader) = tokio::io::duplex(BUF_SIZE);
+        let filename = path.file_name().unwrap().to_str().unwrap();
         let path = path.to_owned();
         tokio::spawn(async move {
             if let Err(e) = dir_zip(&mut writer, &path).await {
@@ -279,6 +282,10 @@ impl InnerService {
         });
         let stream = ReaderStream::new(reader);
         *res.body_mut() = Body::wrap_stream(stream);
+        res.headers_mut().insert(
+            CONTENT_DISPOSITION,
+            HeaderValue::from_str(&format!("attachment; filename=\"{}.zip\"", filename,)).unwrap(),
+        );
         Ok(())
     }