From: Artur Signell Date: Tue, 15 Dec 2009 09:19:08 +0000 (+0000) Subject: Test case and fix for #3817 - Upload: Browsers send different filenames X-Git-Tag: 6.7.0.beta1~2148 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=68c2ac1150f35124440a35a396684bf6c1b49f23;p=vaadin-framework.git Test case and fix for #3817 - Upload: Browsers send different filenames svn changeset:10305/svn branch:6.2 --- diff --git a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java index 34d37fca06..dc2973ebe5 100644 --- a/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java +++ b/src/com/vaadin/terminal/gwt/server/AbstractCommunicationManager.java @@ -375,7 +375,9 @@ public abstract class AbstractCommunicationManager implements while (iter.hasNext()) { final FileItemStream item = iter.next(); final String name = item.getFieldName(); - final String filename = item.getName(); + // Should report only the filename even if the browser sends the + // path + final String filename = removePath(item.getName()); final String mimeType = item.getContentType(); final InputStream stream = item.openStream(); if (item.isFormField()) { @@ -441,6 +443,21 @@ public abstract class AbstractCommunicationManager implements sendUploadResponse(request, response); } + /** + * Removes any possible path information from the filename and returns the + * filename. Separators / and \\ are used. + * + * @param name + * @return + */ + private static String removePath(String filename) { + if (filename != null) { + filename = filename.replaceAll("^.*[/\\\\]", ""); + } + + return filename; + } + /** * TODO document * diff --git a/tests/src/com/vaadin/tests/components/upload/TestUploadFilename.java b/tests/src/com/vaadin/tests/components/upload/TestUploadFilename.java new file mode 100644 index 0000000000..12006412f2 --- /dev/null +++ b/tests/src/com/vaadin/tests/components/upload/TestUploadFilename.java @@ -0,0 +1,61 @@ +package com.vaadin.tests.components.upload; + +import java.io.ByteArrayOutputStream; +import java.io.OutputStream; + +import com.vaadin.tests.components.TestBase; +import com.vaadin.ui.Label; +import com.vaadin.ui.Upload; +import com.vaadin.ui.Upload.FinishedEvent; +import com.vaadin.ui.Upload.Receiver; + +public class TestUploadFilename extends TestBase { + + private Label result = new Label("Waiting for upload"); + private UploadReceiver receiver = new UploadReceiver(); + + @Override + protected void setup() { + + Upload upload = new Upload("Upload a file", receiver); + + addComponent(upload); + addComponent(result); + + upload.addListener(new Upload.FinishedListener() { + public void uploadFinished(FinishedEvent event) { + result.setValue("Got file (should not contain path): " + + receiver.getFilename()); + } + }); + + } + + public static class UploadReceiver implements Receiver { + + private String filename; + + public OutputStream receiveUpload(String filename, String MIMEType) { + this.filename = filename; + return new ByteArrayOutputStream(); + } + + public String getFilename() { + return filename; + } + + } + + @Override + protected String getDescription() { + // TODO Auto-generated method stub + return null; + } + + @Override + protected Integer getTicketNumber() { + // TODO Auto-generated method stub + return null; + } + +}