Я использую виджет загрузки для загрузки файлов.Я создал класс сервлета для получения файлов.Все работает хорошоТо, что я хотел бы сделать, это прикрепить строку к сообщению формы, чтобы я мог получить ее на стороне сервера в методе doPost сервлета.
Есть ли способ присоединить строку запроса к форме вместе с загрузкой файла?если да, то как?
Я бы хотел прикрепить accountIdStr до отправки формы, если это возможно.
Вот форма на стороне клиента
this.userAccount = userAccount;
allAccounts = new LinkedHashMap<>();
accounts = new ListBox();
accounts.setName("accounts");
addStyleName("InviteUsersPanel");
setCellSpacing(10);
VerticalPanel panel = new VerticalPanel();
panel.add(accounts);
final FormPanel form = new FormPanel();
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setMethod(FormPanel.METHOD_POST);
Label lb2 = new Label("Select file");
upload = new FileUpload();
upload.setName("upload");
upload.setEnabled(false);
VerticalPanel holder = new VerticalPanel();
holder.add(lb2);
holder.add(upload);
uploadButton = new Button("Import");
uploadButton.setEnabled(false);
uploadButton.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String filename = upload.getFilename();
if (filename.length() == 0) {
Window.alert("No File Specified!");
} else {
int selectedIndex = accounts.getSelectedIndex();
String accountIdStr = accounts.getValue(selectedIndex);
//set the query string here????
form.submit();
}
}
});
holder.add(uploadButton);
accounts.addChangeHandler(new ChangeHandler() {
public void onChange(ChangeEvent event) {
SelectorState.global().setSelectedAccountId(getSelectedAccountId());
// loadUsers(true);
}
});
form.add(holder);
panel.add(form);
form.setAction(GWT.getModuleBaseURL()+"uploadfile");
form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
@Override
public void onSubmitComplete(FormPanel.SubmitCompleteEvent event) {
if(!event.getResults().equalsIgnoreCase("")) {
Window.alert(event.getResults());
}
}
});
setWidget(0,0,panel);
getCellFormatter().addStyleName(0, 0, "formCell");
getCellFormatter().setVerticalAlignment(0, 1, HasVerticalAlignment.ALIGN_TOP);
loadAccounts();
}
Вот серверсервлет стороны
public class FileUpload extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
long maxFileSize = 20480;
long sizeInBytes = 0;
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
Object b = request.getSession().getAttribute("UZERACCOUNT_ID");
int i = (Integer) b;
// get the string here????
String m = request.getQueryString();
try {
List items = upload.parseRequest(request);
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//handling a normal form-field
if(item.isFormField()) {
System.out.println("Got a form field");
String name = item.getFieldName();
String value = item.getString();
System.out.print("Name:"+name+",Value:"+value);
} else {
//handling file loads
System.out.println("Not form field");
String fieldName = item.getFieldName();
String fileName = item.getName();
if (fileName != null) {
fileName = FilenameUtils.getName(fileName);
}
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
sizeInBytes = item.getSize();
if("image/png".equalsIgnoreCase(contentType) || "image/jpeg".equalsIgnoreCase(contentType)){
} else{
throw new RuntimeException("Only images with file extension .jpg and .png are allowed" );
}
if (sizeInBytes >= maxFileSize) {
throw new RuntimeException("File is bigger than 20kb allowed. Please upload an image thats 20kb or less" );
} else {
byte[] data = item.get();
}
}
}
РЕДАКТИРОВАТЬ Я думаю, что сделал этот пост слишком преждевременно.Я смог это сделать, но добавил его в виде строки запроса перед отправкой, например:
form.setAction(GWT.getModuleBaseURL()+"uploadfile" + "?entityId="+ accountIdStr);