Background:
I have a file which I upload, during this process the link of the file is stored in the database and not the actual file, acutal file is stored in the File System, currently am storing it in my local machine.
Goal:
My goal is to upload a file and download a file properly which has special characters in it - #,$,%,@ etc
.
Issue:
I am able to upload the file with special character but am not able to download file with special characters. Also I cannot do any changes in the Download Servlet
as it is part of the Framework
, so all I can work with is the Upload Servlet
, so my focus is to upload file with special characters in such a way so that I can download them.
I have tried creating an alias for the filename where in am replacing the special characters with '_'
symbol, this approach works fine and am able to download the file but actual name of file is not maintained in here, all special characters in the filename are replaced by '_'
symbol and this is not acceptable as user should actual name of the file.
Any suggestions or approach:
Code:
public ModelAndView save(HttpServletRequest request, HttpServletResponse response, Object command,
ModelAndView modelView, BindException errors) throws Exception {
String newFileName = checkForSpecialCharsAndGetNewFileName(file.getOriginalFilename());
System.out.println("alias filename="+ newFileName);
String url = "f" + (String.valueOf(System.currentTimeMillis())) + "_" + newFileName;
String fileName = file.getOriginalFilename();
System.out.println("FileName "+ fileName);
}
//Code to replace all special characters in the incoming file with '_' symbol.
private String checkForSpecialCharsAndGetNewFileName (String originalFileName) {
final String[] splChars = {"#", "+", "$"};
String newString = originalFileName;
for (int i=0; i<splChars.length; i++)
newString = StringUtils.replace(newString, splChars[i], "_");
return newString;
}
Hope am making some sense here.
Thanks.
Type filename:*& to Explorer search field, this finds all files where the & character appears in the filename or file extension.
Illegal Filename Characters Don't start or end your filename with a space, period, hyphen, or underline. Keep your filenames to a reasonable length and be sure they are under 31 characters. Most operating systems are case sensitive; always use lowercase. Avoid using spaces and underscores; use a hyphen instead.
There is no requirement to delimit the filename in any way (e.g. surround it with quotes or spaces), so encountering such a special char would cause incorrect parsing (i.e is the special char part of the filename or an operator?). <>" are reserved wildcard characters.
If I am understanding you correctly, you want to encode the filename such that when you upload it, and later download it, you want to be able to find the same file from the file name.
To do this, you can use URLEncoder and URLDecoder classes.
You can do this doing something like the following:
String fileName;
fileName = URLEncoder.encode("My ! String #", "UTF-8");
That will encode it. To get the original file name:
String originalFileName = URLDecoder.decode(fileName, "UTF-8");
You can use the encoded file name to download the file from the service. You can then decode the file name to store it appropriately.
Hope that helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With