Malum kullanan varmıdır bilmiyorum ama JSF 1.2 de file upload yok bunu tolere edebilmek için ben yeniden bir inputFile componenti yazdım başkası ihtiyacı olan bir başkası uğraşmasın
HtmlInputFile.java
package tr.com.app.base.component.inputfile;
import java.io.File;
import java.io.Serializable;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
import javax.faces.event.ValueChangeEvent;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class HtmlInputFile extends javax.faces.component.html.HtmlInputText
implements Serializable {
private static final long serialVersionUID = 1L;
private static final Log log = LogFactory.getLog(HtmlInputFile.class);
public static final String FILE_UPLOAD_PREFIX = "inputFile";
private String label;
public String getComponentType() {
return "tr.com.app.faces.Upload";
}
public String getRendererType() {
return "tr.com.app.faces.Upload";
}
public String getFamily() {
return "tr.com.app.faces.File";
}
public void broadcast(FacesEvent event) throws AbortProcessingException {
super.broadcast(event);
}
public Object saveState(FacesContext context) {
Object values[] = new Object[2];
values[0] = super.saveState(context);
values[1] = label;
return ((Object) (values));
}
public void restoreState(FacesContext context, Object state) {
Object values[] = (Object[]) state;
super.restoreState(context, values[0]);
disabled = (Boolean) values[1];
styleClass = (String) values[2];
label = (String) values[3];
disabled = (Boolean) values[4];
file = (File) values[5];
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public void validate(FacesContext context) {
if (context == null) {
throw new NullPointerException();
}
String filename = context.getRequestParameterMap()
.get(this.getClientId(context)).trim();
filename = "c:\\\\temp\" + filename;
File file = new File(filename.trim());
setValue(file);
}
}
HtmlInputFileRender.java
package tr.com.app.base.component.inputfile;
import java.io.IOException;
import javax.faces.application.Application;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.render.Renderer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.icesoft.faces.component.ext.HtmlInputHidden;
import tr.com.app.base.component.ext.HtmlInputHidden;
public class HtmlInputFileRender extends Renderer {
private static final Log log = LogFactory
.getLog(HtmlInputFileRender.class);
public void encodeBegin(FacesContext context, UIComponent component)
throws IOException {
String id = component.getClientId(context);
HtmlInputFile c = (HtmlInputFile) component;
ResponseWriter writer = context.getResponseWriter();
writer.startElement("div", c); writer.startElement("input", c);
writer.writeAttribute("type", "hidden", null);
writer.writeAttribute("id", id, null);
writer.writeAttribute("name", id, null);
writer.endElement("input");
if (c.getShowImage()) {
writer.startElement("img", c);
writer.writeAttribute("style", "display:none;", null);
writer.endElement("img");
}
writer.startElement("input", c);
writer.writeAttribute("type", "button", null);
writer.writeAttribute("onclick", "javascript:this.parentElement.getElementsBySelector(\"input[type='file']\")[0].click()", null);
writer.writeAttribute("value", c.getLabel(), null);
writer.endElement("input");
writer.startElement("input", c);
writer.writeAttribute("type", "file", null);
writer.writeAttribute("style", "display:none;", null);
writer.writeAttribute("onchange", "javascript:appUpload(this);", null);
writer.endElement("input");
writer.endElement("div");
}
}
UploadServlet.java
package tr.com.app.servlet;
import java.io.File;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.util.Calendar;
import java.util.Iterator;
import java.util.List;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String filePath;
private int maxFileSize = 1024 * 1024 * 10;
private int maxMemSize = 1024 * 1024 * 10;
private File file;
public void init() {
filePath = "C:\\\\temp";
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter();
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(maxMemSize);
factory.setRepository(new File(filePath));
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setSizeMax(maxFileSize);
try {
List fileItems = upload.parseRequest(request);
Iterator i = fileItems.iterator();
while (i.hasNext()) {
FileItem fi = (FileItem) i.next();
if (!fi.isFormField()) {
String fileName = fi.getName();
fileName = fi.getName() + request.getSession().getId()
+ Calendar.getInstance().getTimeInMillis();
byte[] fileNameBytes = fileName.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("MD5");
//byte[] hashMD5 = md.digest(fileNameBytes);
md.update(fileNameBytes, 0, fileNameBytes.length);
BigInteger md5Int = new BigInteger(1, md.digest());
fileName = md5Int.toString(32);
fileName = fileName + "." + FilenameUtils.getExtension(fi.getName());
file = new File(filePath + "\\" + fileName);
fi.write(file);
out.println(fileName);
}
}
} catch (Exception ex) {
if (ConstInsCore.DEBUG_ENABLED)
System.out.println(ex);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, java.io.IOException {
response.getWriter().write("Upload Servlet");
}
}
fileUpload.js
var appUpload = function(item) {
var data = new FormData();
data.append('uploadFile', item.files[0]);
var btn = jQuery(item).parent().find("input[type='button']");
btn.val("Yükleniyor...");
btn.attr("disabled", true);
btn.addClass("disabled");
jQuery.ajax({
type : 'post',
url : '/upload?name=' + item.files[0].name,
data : data,
cache : false,
contentType : false,
processData : false,
success : function(f) {
var hidden = jQuery(item).parent().find("input[type='hidden']");
if (hidden) {
hidden.val(f);
}
},
xhrFields : {
onprogress : function(progress) {
var percentage = Math
.floor((progress.total / progress.totalSize) * 100);
console.log('progress', percentage);
if (percentage === 100) {
console.log('DONE!');
}
}
},
complete : function() {
btn.val("Yükleme Tamamlandı");
btn.removeClass("disabled");
btn.attr("disabled", false);
},
error : function() {
btn.attr("disabled", false);
btn.removeClass("disabled");
btn.val("Dosya Yüklenemedi");
}
});
};
Configuration
Web.xml
<render-kit>
<renderer>
<component-family>tr.com.app.faces.File</component-family>
<renderer-type>tr.com.app.faces.Upload</renderer-type>
<renderer-class>tr.com.app.base.component.inputfile.HtmlInputFileRender</renderer-class>
</renderer>
</render-kit>
<component>
<component-type>InputFile</component-type>
<component-class>tr.com.app.base.component.inputfile.HtmlInputFile</component-class>
</component>
<tag>
<tag-name>inputFile</tag-name>
<component>
<component-type>InputFile</component-type>
</component>
</tag>
xhtml dosya içerisinde tanımladığınız tag ile inputFile olarak kullanabilirsiniz