-
Notifications
You must be signed in to change notification settings - Fork 8
/
fileUpload.php
57 lines (53 loc) · 1.96 KB
/
fileUpload.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?PHP
set_time_limit(0);
$upload_dir = "upload/";
$action = $_GET['action'];
if ($action == 'init') {
$files = $_POST['files'];
$return = array();
foreach ($files as $v) {
$destfile = 'upload/' . rawurlencode($v['name']);
// cover=false时,如果文件存在、文件名、大小,修改时间都一样,则返回false,其他都返回true,表示文件有修改,需要重传。
if (isset($_POST['cover']) && $_POST['cover'] == "true") {
@unlink($destfile);
$return[] = true;
} else {
if (file_exists($destfile)) {
if (filesize($destfile) == $v['size'] && filemtime($destfile) == $v['lastModified']) {
$return[] = false;
} else {
@unlink($destfile);
$return[] = true;
}
} else {
$return[] = true;
}
}
}
exit(json_encode($return));
} elseif ($action == 'upload') {
// 上传文件片段
try {
$src = fopen('php://input', 'rb');
// windows上传文件如果局域网速度太快,往往会出现无权,需要等一下。这里设置不超过5秒
$time = time();
$destfile = $upload_dir . rawurlencode($_GET['name']);
while (!($dest = @fopen($destfile, 'cb'))) {
if (time() - $time > 5) {
throw new Exception('写文件超时');
}
}
fseek($dest, $_GET['start']);
stream_copy_to_stream($src, $dest, $_GET['length']);
fclose($dest);
touch($destfile, $_GET['lastModified']);
exit(json_encode(array('error' => 0)));
} catch (Exception $e) {
header("Status:500 Internal Server Error");
exit(json_encode(array('error' => 1, 'msg' => $e->getMessage())));
}
} elseif ($action == 'delete') {
// 删除上传文件
$destfile = $upload_dir . rawurlencode($_GET['name']);
@unlink($destfile);
}