download: use head for filename (nx)
Signed-off-by: Varun Patil <radialapps@gmail.com>pull/653/head
parent
7d1cf975aa
commit
1ffada41b1
|
@ -90,7 +90,11 @@ class DownloadController extends GenericApiController
|
||||||
$session = \OC::$server->get(ISession::class);
|
$session = \OC::$server->get(ISession::class);
|
||||||
$key = "memories_download_{$handle}";
|
$key = "memories_download_{$handle}";
|
||||||
$info = $session->get($key);
|
$info = $session->get($key);
|
||||||
$session->remove($key);
|
|
||||||
|
// Remove handle from session unless HEAD request
|
||||||
|
if ('HEAD' !== $this->request->getMethod()) {
|
||||||
|
$session->remove($key);
|
||||||
|
}
|
||||||
|
|
||||||
if (null === $info) {
|
if (null === $info) {
|
||||||
throw Exceptions::NotFound('handle');
|
throw Exceptions::NotFound('handle');
|
||||||
|
@ -171,13 +175,17 @@ class DownloadController extends GenericApiController
|
||||||
$out->setHeader('Content-Type: '.$file->getMimeType());
|
$out->setHeader('Content-Type: '.$file->getMimeType());
|
||||||
|
|
||||||
// Make sure the browser downloads the file
|
// Make sure the browser downloads the file
|
||||||
$out->setHeader('Content-Disposition: attachment; filename="'.$file->getName().'"');
|
$filename = str_replace('"', '\\"', $file->getName());
|
||||||
|
$out->setHeader('Content-Disposition: attachment; filename="'.$filename.'"');
|
||||||
|
|
||||||
// Prevent output from being buffered
|
// Prevent output from being buffered
|
||||||
$out->setHeader('Content-Encoding: none');
|
$out->setHeader('Content-Encoding: none');
|
||||||
$out->setHeader('X-Content-Encoded-By: none');
|
$out->setHeader('X-Content-Encoded-By: none');
|
||||||
$out->setHeader('X-Accel-Buffering: no');
|
$out->setHeader('X-Accel-Buffering: no');
|
||||||
|
|
||||||
|
// Quit if HEAD request
|
||||||
|
if ('HEAD' === $this->request->getMethod()) return;
|
||||||
|
|
||||||
// Open file to send
|
// Open file to send
|
||||||
$res = $file->fopen('rb');
|
$res = $file->fopen('rb');
|
||||||
|
|
||||||
|
@ -255,6 +263,9 @@ class DownloadController extends GenericApiController
|
||||||
// Create a zip file
|
// Create a zip file
|
||||||
$streamer->sendHeaders($name);
|
$streamer->sendHeaders($name);
|
||||||
|
|
||||||
|
// Quit if HEAD request
|
||||||
|
if ('HEAD' === $this->request->getMethod()) return;
|
||||||
|
|
||||||
// Multiple files might have the same name
|
// Multiple files might have the same name
|
||||||
// So we need to add a number to the end of the name
|
// So we need to add a number to the end of the name
|
||||||
$nameCounts = [];
|
$nameCounts = [];
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import axios from '@nextcloud/axios';
|
||||||
import type { IDay, IPhoto } from './types';
|
import type { IDay, IPhoto } from './types';
|
||||||
|
|
||||||
const BASE_URL = 'http://127.0.0.1';
|
const BASE_URL = 'http://127.0.0.1';
|
||||||
|
@ -17,7 +18,7 @@ export const API = {
|
||||||
export type NativeX = {
|
export type NativeX = {
|
||||||
isNative: () => boolean;
|
isNative: () => boolean;
|
||||||
setThemeColor: (color: string, isDark: boolean) => void;
|
setThemeColor: (color: string, isDark: boolean) => void;
|
||||||
downloadFromUrl: (url: string) => void;
|
downloadFromUrl: (url: string, filename: string) => void;
|
||||||
};
|
};
|
||||||
|
|
||||||
/** The native interface is a global object that is injected by the native app. */
|
/** The native interface is a global object that is injected by the native app. */
|
||||||
|
@ -45,7 +46,18 @@ export const setTheme = (color?: string, dark?: boolean) => {
|
||||||
/**
|
/**
|
||||||
* Download a file from the given URL.
|
* Download a file from the given URL.
|
||||||
*/
|
*/
|
||||||
export const downloadFromUrl = (url: string) => nativex?.downloadFromUrl?.(url);
|
export const downloadFromUrl = async (url: string) => {
|
||||||
|
// Make HEAD request to get filename
|
||||||
|
const res = await axios.head(url);
|
||||||
|
let filename = res.headers['content-disposition'];
|
||||||
|
if (res.status !== 200 || !filename) return;
|
||||||
|
|
||||||
|
// Extract filename from header without quotes
|
||||||
|
filename = filename.split('filename="')[1].slice(0, -1);
|
||||||
|
|
||||||
|
// Hand off to download manager
|
||||||
|
nativex?.downloadFromUrl?.(url, filename);
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Extend a list of days with local days.
|
* Extend a list of days with local days.
|
||||||
|
|
Loading…
Reference in New Issue