Kawai Wiki

Rev

Rev 168 | Rev 196 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
101 soliveira 1
package org.kawai.action;
2
 
3
import java.io.File;
4
import java.io.FileOutputStream;
5
import java.io.InputStream;
103 soliveira 6
import java.util.Set;
7
import java.util.TreeSet;
101 soliveira 8
 
9
import org.apache.commons.fileupload.FileItem;
10
import org.kawai.dao.PageDAO;
11
import org.kawai.dao.UserDAO;
12
import org.mentawai.core.ApplicationManager;
145 soliveira 13
import org.mentawai.filter.AuthenticationFree;
101 soliveira 14
 
145 soliveira 15
public class FileAction extends AbstractAction implements AuthenticationFree {
101 soliveira 16
 
17
        private static final String UPLOAD_DIR = "uploads";
18
 
104 soliveira 19
        public FileAction(UserDAO userDAO, PageDAO pageDAO) {
101 soliveira 20
                super(userDAO, pageDAO);
21
        }
22
 
145 soliveira 23
        @Override
24
        public boolean bypassAuthentication(String method) {
25
                if (method != null && method.equals("upload")) return false;
26
                return false;
27
        }
28
 
102 soliveira 29
        private String getFolderFromName(String name) {
101 soliveira 30
                name = name.toLowerCase();
31
                if (name.endsWith(".jpg") || name.endsWith(".gif") || name.endsWith(".jpeg") || name.endsWith(".png")) {
102 soliveira 32
                        return "images";
101 soliveira 33
                }
168 soliveira 34
                if (name.endsWith(".jar") || name.endsWith(".zip") || name.endsWith(".tar") || name.endsWith(".gz") || name.endsWith(".bzip") || name.endsWith(".war")) {
102 soliveira 35
                        return "archive";
101 soliveira 36
                }
102 soliveira 37
                return "others";
101 soliveira 38
        }
39
 
40
        public String upload() {
41
 
42
                FileItem fileItem = (FileItem) input.getValue("Filedata");
43
 
44
                if (fileItem != null) {
45
 
46
                        String filename = fileItem.getName();
102 soliveira 47
                        String folder = getFolderFromName(filename);
48
                        String dir = ApplicationManager.getRealPath() + File.separator + UPLOAD_DIR + File.separator + folder + File.separator;
49
 
101 soliveira 50
                        File file = new File(dir + filename);
51
                        if (file.exists()) {
52
                                output.setValue("status", "error");
53
                                output.setValue("msg", "File already exists: " + filename);
54
                                return AJAX;
55
                        }
56
 
57
                        try {
58
 
59
                                FileOutputStream fos = new FileOutputStream(file);
60
 
61
                                InputStream is = fileItem.getInputStream();
62
                                byte[] data = new byte[4096];
63
                                int read;
64
                                while((read = is.read(data)) != -1) {
65
                                        fos.write(data, 0, read);
66
                                }
67
                                is.close();
68
                                fos.close();
69
 
70
                                output.setValue("status", "success");
102 soliveira 71
                                output.setValue("msg", "File uploaded to folder <i>" + folder + "</i>: " + filename);
101 soliveira 72
 
73
                                return AJAX;
74
 
75
                        } catch(Exception e) {
102 soliveira 76
                                e.printStackTrace();
101 soliveira 77
                                output.setValue("status", "error");
102 soliveira 78
                                output.setValue("msg", "Error saving file: " + filename);
101 soliveira 79
                                return AJAX;
80
                        }
81
 
82
                } else {
83
                        output.setValue("status", "error");
84
                        output.setValue("msg", "Error uploading file!");
85
                        return AJAX;
86
                }
87
        }
103 soliveira 88
 
89
        public String listFiles() {
90
 
91
                File[] images = (new File(ApplicationManager.getRealPath() + File.separator + "uploads" + File.separator + "images")).listFiles();
92
                File[] archive = (new File(ApplicationManager.getRealPath() + File.separator + "uploads" + File.separator + "archive")).listFiles();
93
                File[] others = (new File(ApplicationManager.getRealPath() + File.separator + "uploads" + File.separator + "others")).listFiles();
94
 
95
                Set<String> files = new TreeSet<String>();
171 soliveira 96
                if (images != null) for(File f : images) {
97
                        if (f.isHidden()) continue;
103 soliveira 98
                        files.add("/uploads/images/" + f.getName());
99
                }
171 soliveira 100
                if (archive != null) for(File f : archive) {
101
                        if (f.isHidden()) continue;
103 soliveira 102
                        files.add("/uploads/archive/" + f.getName());
103
                }
171 soliveira 104
                if (others != null) for(File f : others) {
105
                        if (f.isHidden()) continue;
103 soliveira 106
                        files.add("/uploads/others/" + f.getName());
107
                }
108
 
109
                output.setValue("files", files);
110
                return AJAX;
111
        }
101 soliveira 112
}