Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    File Upload - Anyway to Check File Size BEFORE Upload?

    Hello:

    Here's what I'm using:

    - SmartGWT 2.3 (latest night build from 11/11/2010)
    - GWT 2.1
    - All browsers

    I'm trying to figure out if there is a method to determine file size BEFORE uploading a file to the server. Basically I'm trying to set a maximum of 2MB for image files.

    Here's the class I'm using to upload:

    Code:
    package com.mybllc.iPerform.client.components;
    
    import com.google.gwt.event.shared.HandlerRegistration;
    import com.mybllc.myapp.client.Utils;
    import com.smartgwt.client.types.Alignment;
    import com.smartgwt.client.types.Encoding;
    import com.smartgwt.client.types.FormMethod;
    import com.smartgwt.client.util.SC;
    import com.smartgwt.client.widgets.Dialog;
    import com.smartgwt.client.widgets.IButton;
    import com.smartgwt.client.widgets.events.ClickEvent;
    import com.smartgwt.client.widgets.events.ClickHandler;
    import com.smartgwt.client.widgets.events.HasValueChangedHandlers;
    import com.smartgwt.client.widgets.events.ValueChangedEvent;
    import com.smartgwt.client.widgets.events.ValueChangedHandler;
    import com.smartgwt.client.widgets.form.fields.HiddenItem;
    import com.smartgwt.client.widgets.form.fields.UploadItem;
    import com.smartgwt.client.widgets.layout.HLayout;
    
    public class UploadDialog extends Dialog 
    	implements HasValueChangedHandlers {
    	
    	private DynamicCallbackForm _mainForm;
    	private UploadItem _fileUpload = null;
    	private String _uploadArgument = null,
    	               _appName = null,
    	               _command = null;
    
    	private UploadDialog _upd = null;
    	public String _fileUploaded = null;
    	
    	public UploadDialog(String uploadarg, String appname, String command)
    	{
    		_uploadArgument = uploadarg;
    		_appName = appname;
    		_command = command;
    		createUI();
    		_upd = this;
    	}
    	
    	private void createUI()
    	{
    		setTitle("Upload");
    		setWidth(315);
    		setHeight(100);
    		
    		HLayout h = new HLayout();
    		h.setWidth100();
    		h.setHeight100();
    		
    		addItem(h);
    		
    		_mainForm = new DynamicCallbackForm("Upload");
    		_mainForm.setAction(Utils.constants.url());
    		_mainForm.setEncoding(Encoding.MULTIPART);
    		_mainForm.setMethod(FormMethod.POST);
    		_mainForm.setWidth100();
    		_mainForm.setHeight100();
    				
    		_mainForm.addFormHandler(new DynamicFormHandler()
    		{
    			public void onSubmitComplete(DynamicFormSubmitCompleteEvent event) {
    				SC.clearPrompt();	
    				if(event.getResults().startsWith("1000")){					
    					String temp = (String)_fileUpload.getValue();
    
    					if(temp.indexOf("/") >= 0)
    						_fileUploaded = temp.substring( temp.lastIndexOf("/") + 1 );
    					else if(temp.indexOf("//")>= 0)
    						_fileUploaded = temp.substring(  temp.lastIndexOf("//")+1  );
    					else if (temp.indexOf("\\")>= 0)
    						_fileUploaded = temp.substring(  temp.lastIndexOf("\\")+1  );
    					else
    						_fileUploaded = (String)_fileUpload.getValue();
    					  					
    					ValueChangedEvent.fire(_upd,null);
    				}
    			}
    		});
    		
    		_fileUpload = new UploadItem();
    		_fileUpload.setPrompt("Click the button to select the file to upload");
    		_fileUpload.setName(_uploadArgument);
    		_fileUpload.setWidth(285);
    		_fileUpload.setShowTitle(false);
    		
    		HiddenItem appField = new HiddenItem();
    		appField.setName("app");
    		appField.setValue(_appName);
    		
    		HiddenItem cmdField = new HiddenItem();
    		cmdField.setName("cmd");
    		cmdField.setValue(_command);
    		
    		HiddenItem heightField = new HiddenItem();
    		heightField.setName("height");
    		heightField.setValue("275");
    		
    		_mainForm.setItems(appField,cmdField,heightField,_fileUpload);
    		
    		h.addMember(_mainForm);
    		
    		IButton saveButton = new IButton();
    		saveButton.setTitle("Save");
    		saveButton.setIcon("save.png");
    		saveButton.setWidth(75);
    		saveButton.addClickHandler(new ClickHandler()
    		{
    			public void onClick(ClickEvent event) {
    				save();
    			}			
    		});
    		
    		IButton cancelButton = new IButton();
    		cancelButton.setTitle("Cancel");
    		cancelButton.setIcon("cancel.png");
    		cancelButton.setWidth(75);
    		cancelButton.addClickHandler(new ClickHandler()
    		{
    			public void onClick(ClickEvent event) {
    				_upd.destroy();
    			}			
    		});
    		
    		HLayout buttonLayout = new HLayout();
    		buttonLayout.setAlign(Alignment.RIGHT);
    		buttonLayout.setMembersMargin(10);
    		buttonLayout.setWidth100();
    		buttonLayout.addMember(saveButton);
    		buttonLayout.addMember(cancelButton);
    				
    		setToolbarButtons(buttonLayout);
    				
    		centerInPage();
    		setIsModal(true);
    		show();
    	}
    	
    	private void save()
    	{
    		if(_fileUpload.getValue() == null || ((String)_fileUpload.getValue()).length()==0)
    		{
    			SC.say("You must select a file before uploading");
    			return;
    		}
    
    		//Lets limit the size of the file upload if its an image....
    		String filename = (String)_fileUpload.getValue();
    		if(filename.indexOf(".jpg") > 0 ||
    				filename.indexOf(".png") > 0 ||
    				filename.indexOf(".gif") > 0){
    			
    			//Lets check file size....
    			
    		}
    		
    		SC.showPrompt("<center>Uploading...</center><br><img src=\"images/ajax-loader.gif\"></img>");
    		_mainForm.submitForm();
    	}
    
    	public HandlerRegistration addValueChangedHandler(
    			ValueChangedHandler handler) {
    		return doAddHandler(handler, ValueChangedEvent.getType());
    	}
    }
    Thanks!

    Chris

    #2
    You could do something like
    Code:
       RestDataSource ds = new RestDataSource();
       HashMap<String,String> params = new HashMap<String,String>();
       params.put("filename",fileName);
       ds.setDefaultParams(params);
       ds.fetchData(null,new DSCallback() {
              public void execute(...) {
                  // check size here from the record returned and submit or show error
              }
       });

    Comment

    Working...
    X