Sunday, May 19, 2024
 Popular · Latest · Hot · Upcoming
67
rated 0 times [  71] [ 4]  / answers: 1 / hits: 32156  / 14 Years ago, wed, april 7, 2010, 12:00:00

I want to read the file path from html input type=file
(the entry selected in the file dialog by the user)



<script>   
function OpenFileDialog(form) {
var a = document.getElementById(inputfile).click();
SampleForm.filePath.value = //set the path here
document.SampleForm.submit();
}
</script>

<form name=SampleForm action=TestServlet method=get>
<input type=file style=display:none; id=inputfile/>
<a href=javascript:OpenFileDialog(this.form);>Open here</a>
<input type=hidden name=filePath value=/>
</form>


I want the path of the selected file to be read in my Servlet class
How do I get the file path? Can I read it from var a?
Or is there any way to directly access the file path from the input type=file from my servlet?


More From » html

 Answers
58

First, to clear a common misunderstanding: the file path is worthless in the server side. Imagine that I am the client and I give you the file path c:/passwords.txt, how would you as being the server ever get its contents? Using java.io.File? No? That would only work if both client and server runs at the physically same machine. The only possible occurence is the local development environment.



Second, to clarify a restriction: Javascript cannot do anything with a input type=file element due to security restrictions. If it was possible, then one could develop a website which sets the uploaded file to c:/passwords.txt and submits the form during onload. That's easy unaskingly collecting of all password files from everyone who visits the website! No?



After all, you're rather interested in the file contents. As stated in the HTML forms spec you need to set the request method to POST and the request encoding to multipart/form-data in the parent <form> element.



<form action=upload method=post enctype=multipart/form-data>
<input type=file name=file>
<input type=submit>
</form>


This way the file will be sent in the request body. As the standard Servlet API versions up to with 2.5 doesn't have builtin facilities to parse mulipart/form-data requests, you need to parse the request yourself. The best way is to use Apache Commons FileUpload for this. Follow the link and read both the User Guide and Frequently Asked Questions for code examples and tips&tricks. When you're already on Servlet 3.0, then you can just use the Servlet API provided HttpServletRequest#getParts() for this. You can find here an article with code examples about that.


[#97140] Sunday, April 4, 2010, 14 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
domeniccolti

Total Points: 276
Total Questions: 98
Total Answers: 93

Location: India
Member since Fri, May 13, 2022
2 Years ago
domeniccolti questions
Mon, Oct 18, 21, 00:00, 3 Years ago
Thu, Oct 14, 21, 00:00, 3 Years ago
Thu, Jul 15, 21, 00:00, 3 Years ago
Sat, Oct 24, 20, 00:00, 4 Years ago
Thu, Sep 3, 20, 00:00, 4 Years ago
;