Tengo que enviar el archivo y sus propiedades al servidor GWT.Enviando archivo y HashMap al servidor en GWT
Para enviar un archivo utilicé el panel de formulario.
public class BrowseFile extends DialogBox {
// more code
// ..
private FormPanel getFormPanel() {
if (formPanel == null) {
formPanel = new FormPanel();
formPanel.setMethod(FormPanel.METHOD_POST);
formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
formPanel.setAction(GWT.getHostPageBaseURL() +"UploadFileServlet");
formPanel.addSubmitHandler(new FormPanel.SubmitHandler(){
public void onSubmit(SubmitEvent event) {
// TODO Auto-generated method stub
setFilename(fileUpload.getFilename());
}
});
}
return formPanel;
}
}
todas las propiedades de este archivo están en Hashmap
hay 2 cuadro de diálogo Propertybox extends DialogBox
y
BrowseFile extends DialogBox
dentro del constructor de PropertyBox hay BrowseFile
Cuando PropertyBox constructor
setSize("600px", "670px");
setHTML("Add Document");
setWidget(getVerticalPanel());
browseFile = new BrowseFile();
la propiedad personalizada en el interior del PropertyBox depende de la clase seleccionada (clase es Widget árbol)
En el lado del servidor
public class FileUpload extends HttpServlet implements Servlet{
private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(FileUpload.class
.getName());
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
byte[] buffer = new byte[115200];//
String fileName = null;
String mimetype = null;
String majorVersion = null;
InputStream stream = null;
try {
ServletFileUpload upload = new ServletFileUpload();
FileItemIterator iterator = upload.getItemIterator(request);
while (iterator.hasNext()) {
FileItemStream item = iterator.next();
stream = item.openStream();
if (item.isFormField()) {
//
} else {
fileName = item.getName();
mimetype = item.getContentType();
//
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ByteArrayOutputStream output = new ByteArrayOutputStream();
int len;
while ((len = stream.read(buffer, 0, buffer.length)) != -1) {
output.write(buffer, 0, len);
}
ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray());
Session session =RootFolder.getSession();
ContentStream contentStream = session.getObjectFactory()
.createContentStream(fileName, output.size(), mimetype, input);
}
para crear un documento en el repositorio externo que necesito de propiedades de documento en hasmap
folder.createDocument (Document Property, contentStream, VersioningState.MAJOR);
La propiedad de documento se debe enviar a esta clase de onClick
caso de Button ADD
del Documento Clase propiedad
***** ¿Cómo enviar esta propiedad de documento con el servidor en FileUpload clase *****
Puede haber más de 200 propiedades. Y estas propiedades dependen de la clase seleccionada para el documento. Y hay más de 50 clases de documentos. SO agregar el hashMap como campo de formulario no es una buena opción y también valorar parte de hasmap es una clase que tiene 3 variables (value, dataType). – NewCodeLearner
@NewCodeLearner No veo por qué no puede agregar campos de formulario a la solicitud; después de todo, son datos multiparte y, por lo tanto, puede manejar (casi) un número ilimitado de campos. Y la enumeración a través de HashMap.entrySet no es tan importante. Podría aconsejar serializar HashMap en algún flujo binario y luego enviarlo como datos sin procesar, pero esto es un poco de pirateo y apuesto a que no quieres esto. Crea campos dinámicamente para cada tipo de archivo, los clasifica en un conjunto de campos de formulario en el cliente y los elimina en el servidor, obtiene el HashMap junto con el archivo, y eso es todo. ¿Tiene sentido? Si no, por favor explique por qué. – jdevelop
hey no soy muy bueno en programación y tengo muy poco conocimiento de ello. Voy a intentar lo que estás diciendo. Entonces te haré saber que quiero lo mismo o no. Gracias. – NewCodeLearner