Kawai Wiki

Rev

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