Search code examples
htmlcssformsfile-upload

Styling the input type="file". How do I display the file path?


I have been trying to style an input type="file" field. My button is styled but I can't seem to figure out how to get the filepath/file to show when the user selects the file to upload. Can anyone out there help?

.file-upload {
  overflow: hidden;
  display: inline-block;
  position: relative;
  vertical-align: middle;
  text-align: center;
  color: #fff;
  border: 2px solid #707070;
  background: #A0A0A0;
  -moz-border-radius: 8px;
  -webkit-border-radius: 8px;
  border-radius: 8px;
  text-shadow: #000 1px 1px 4px;
  cursor: pointer;
}

.file-upload:hover {
  background: #2FA2FF;
}

.file-upload.focus {
  outline: 2px solid yellow;
}

.file-upload input {
  position: absolute;
  top: 0;
  left: 0;
  margin: 0;
  font-size: 12px;
  opacity: 0;
  filter: alpha(opacity=0);
  z-index: -1;
}

.file-upload span {
  position: absolute;
  top: 0;
  left: 0;
  display: inline-block;
  padding-top: .45em;
}

.file-upload {
  height: 38px;
}

.file-upload,
.file-upload span {
  width: 160px;
}

.file-upload-status {
  margin-left: 10px;
  vertical-align: middle;
  padding: 7px 11px;
  font-weight: bold;
  font-size: 16px;
  color: #888;
  background: #f8f8f8;
  border: 3px solid #ddd;
}
<form action="" method="POST" enctype="multipart/form-data">
  <div class="fileupload-buttonbar">
    <label class="file-upload"><span>Upload....</span><input name="uploadfile" type="file"> </label>
  </div>
</form>


Solution

  • Add a change event to the input field, and then just get it's .value.

    Example (using jQuery):

    $('input[name="uploadfile"]').change(function(){
        var fileName = $(this).val();
        alert(fileName);
    });
    

    DEMO: http://jsfiddle.net/hjNEC/2/

    EDIT: Since the input field is hidden, and the file name is part of that, you're gonna have to display fileName on the page yourself.