File upload time
Hi,
We are experiencing performance problems uploading file using multipart form
post requests to a Weblogic Server V6.1 SP1 from IE 5.5 on Win 2000 SP2.
The upload time seems to increase exponentially with the file size with a
90Mb file (video) taking as long as 1/2 hour.
We have done a very simple test which reads the bytes coming in without
parsing or processing of any kind.
If anybody knows of a solution to this or at least what the problem is it
would be greatly appreciated.
Jim [email protected]
I'm wondering where the bottleneck is, client or server. Try doing the same
from Mozilla on Windows and from Mozilla on Solaris to try to prove that the
problem is the server (i.e. if Mozilla on two OSs has the same problem, then
it's probably an issue on the server end).
Peace,
Cameron Purdy
Tangosol, Inc.
Clustering Weblogic? You're either using Coherence, or you should be!
Download a Tangosol Coherence eval today at http://www.tangosol.com/
"Jim Durnford" <[email protected]> wrote in message
news:[email protected]...
> In my haste I left out critically important information. Sorry.
> The server is running on Solaris and the client is running on Window2000
> IE5.5.
>
>
> "Kevin L. Burns" <[email protected]> wrote in message
> news:[email protected]...
> > This is curious. I wrote my own multipart processing code and have not
> > experienced this. How are you reading off of the stream? I would
> > assume you're just looping through the read or readLine functions and
> > passing the data into byte arrays. I actually do some processing while
> > I'm reading in the data and have not had any issues. At the same time,
> > I haven't done much with files of quite that size. You might try doing
> > some investigation to peripheral issues.
> >
> > -Kevin
> >
> > Jim Durnford wrote:
> >
> > > Hi,
> > >
> > > We are experiencing performance problems uploading file using
multipart
> form
> > > post requests to a Weblogic Server V6.1 SP1 from IE 5.5 on Win 2000
SP2.
> > > The upload time seems to increase exponentially with the file size
with
> a
> > > 90Mb file (video) taking as long as 1/2 hour.
> > > We have done a very simple test which reads the bytes coming in
without
> > > parsing or processing of any kind.
> > >
> > > If anybody knows of a solution to this or at least what the problem is
> it
> > > would be greatly appreciated.
> > >
> > >
> > > Jim [email protected]
> > >
> > >
> > >
> >
>
>
Similar Messages
-
File Upload extension that doesn't time out?!
Can anyone recommend a good File Upload utility that won't
time out on a
shared server? Ideally ASP/VBScript.
Restrictions on our shared server mean that we only have 15
seconds to
execute a script.
My concern is that this just isn't going to be possible on a
shared server
because if someone wants to upload a 3MB image then it's,
naturally, going
to take more than 15 seconds.
Would appreciate any advice, thanks.
Regards
Nath.This is not a script issue, but a server issue. You would
need to talk to
your host.
Murray --- ICQ 71997575
Adobe Community Expert
(If you *MUST* email me, don't LAUGH when you do so!)
==================
http://www.projectseven.com/go
- DW FAQs, Tutorials & Resources
http://www.dwfaq.com - DW FAQs,
Tutorials & Resources
==================
"tradmusic.com" <[email protected]> wrote in
message
news:fu1qrl$r6e$[email protected]..
> Can anyone recommend a good File Upload utility that
won't time out on a
> shared server? Ideally ASP/VBScript.
> Restrictions on our shared server mean that we only have
15 seconds to
> execute a script.
>
> My concern is that this just isn't going to be possible
on a shared server
> because if someone wants to upload a 3MB image then
it's, naturally, going
> to take more than 15 seconds.
>
> Would appreciate any advice, thanks.
>
> Regards
> Nath.
> -
I'm encountering this error and not sure how to fix, I'm quite new to vCenter so please bear with me.
I'm trying out vCenter 5.1 with Update Manager 5.1 right now. No license key has been entered and I still have 50 odd days to try it out.
2 ESXi hosts are being managed by this vCenter, and they're both running ESXi 4.0
I'm looking to use Update Manager to try to upgrade the ESXi 4.0 hosts to ESXi 5.1
I downloaded the image file VMware-VIMSetup-all-5.1.0-799735.iso from VMWare website, and is looking to import it using the Update Manager so I can update the ESXi hosts, but I keep on getting the error:
File name: VMware-VIMSetup-all-5.1.0-799735.iso
Failed to transfer data
Error was: A web exception has occurred during file upload
I tried importing it by using vSphere client to connect to vCenter server both remotely and locally, with firewall disabled.
I've read http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1026602
I've disabled firewall, and there is no anti-virus program on the server. I've also restarted the machine several times, to no avail, I didn't reinstall update manager because the whole Windows and VCenter installations are clean from scratch.
I logged into the vSphere Client using Active Directory credentials, and I've made all Domain Admins (which my account is a member of) part of the administrator group on the vCenter server. I can't log in using admin@System-Domain because it tells me I don't have permissions for it, I still haven't really had the chance to figure out why that is and not sure if that makes a difference.
Also, I'm fairly certain I'm using the right image file, as I've burned some DVD's used that image file to upgrade some other ESXi hosts. Unless there's a special image file I need to download?
I'm at lost on what I can do to make it work. Please advise.
Thanks.The ISO file you mentioned is the one for vCenter Server. What you need is the "VMware-VMvisor-Installer-5.1.0-799733.x86_64.iso" (or VMware-VMvisor-Installer-201210001-838463.x86_64.iso) for the ESXi host.
André -
File Upload.. Strange Problem..
im trying to read file data and print it in the browser. I dont want to save the file. just to read the uploaded file which is TAB delimited..
First time it works fine. but If I browse back button and reload another file and submit. I am getting content of first file and second file. I closed the browser and reopened it but still problem is not resolved. it keeps on adding file content instead of showing current uploaded file. I dont know what to do.
here is my code
upload.html
<html>
<head>
<title>File Upload Form</title>
</head>
<body>
Upload File using this..
<FORM METHOD="POST" ENCTYPE="multipart/form-data" action="uploadFile.jsp">
File: <input type="file" name="file"><br>
<input value="Submit" type="submit">
</form>
</body>
</html>
UploadFile.jsp
=============
<%@page language="java" import="java.io.*" %>
<%@page language="java" import="java.util.*" %>
<%!
private BufferedInputStream bis = null;
int MAX_LINES = 2000;
private String currentLine = "";
//private String[] PartNumber;
//private String[] Quantity;
public int disp_counter = 0;
public int mime_counter = 0;
public int boundary_counter = 0;
private String content_diposition = null;
private HttpServletRequest request;
private javax.servlet.jsp.JspWriter mOut;
The incoming request needs to be an InputStream before it can be parsed. This method creates an InputStream from the request. The
request contains the uploaded file contents
public void setInputStream(HttpServletRequest request, JspWriter _out)throws IOException {
try{
bis = new BufferedInputStream(request.getInputStream());
} catch(IOException e){
e.printStackTrace();
this.request = request;
this.mOut = _out;
//mOut.println("After setting input Stream<br>");
private int getRealContentLength() throws Exception
boundary_counter = readBoundaryLength(bis);
content_diposition = readContentDisposition(bis);
//mOut.println(" getRealContentLength() content_diposition ="+content_diposition+"<br>");
mime_counter = readUntilBody(bis);
int tmpContentLength = getContentLength();
int retLength;
mOut.println(" getRealContentLength() boundary_counter ="+boundary_counter+"<br>");
mOut.println(" getRealContentLength() content_diposition ="+content_diposition+"<br>");
mOut.println(" getRealContentLength() disp_counter ="+disp_counter+"<br>");
mOut.println(" getRealContentLength() mime_counter ="+mime_counter+"<br>");
mOut.println(" getRealContentLength() tmpContentLength ="+tmpContentLength+"<br>");
retLength = getContentLength()-boundary_counter-2-mime_counter-disp_counter;
return retLength;
private int readBoundaryLength(BufferedInputStream fis) throws Exception{
//mOut.println("---- Inside readBoundaryLength ----<br>");
StringBuffer sb = new StringBuffer();
byte[] b = new byte[1];
int counter=0;
while(true){
try{
fis.read(b);
counter++;
//mOut.println("RB "+counter+"="+b[0]+"<br>");
sb.append( new String(b));
//if('\r'==b[0])
if(13==b[0]){
fis.read(b);
sb.append( new String(b));
//mOut.println("RB next="+b[0]+"<br>");
break;
}catch(IOException e){
e.printStackTrace();
//mOut.println("----Counter before return="+counter+" STR="+sb.toString()+"----<br>");
b = null;
//mOut.println("---- End readBoundaryLength ----<br>");
return counter+1;
private int readUntilBody(BufferedInputStream fis) throws Exception{
byte[] b = new byte[1];
mime_counter=0;
int counter = 0;
StringBuffer sb = new StringBuffer();
while(true){
try{
fis.read(b);
sb.append(new String(b));
mime_counter++;
//mOut.println("RUntilB "+mime_counter+"="+b[0]+"<br>");
//if('\r'==b[0])
if(13==b[0])
counter++;
if(counter == 2){
fis.read(b);
sb.append(new String(b));
//mOut.println("RUntilB counter=2 "+mime_counter+"="+b[0]+"<br>");
break;
}catch(IOException e){
e.printStackTrace();
b = null;
//mOut.println("RUntilB="+sb.toString()+"<br>");
return mime_counter;
private int getContentLength(){
return request.getContentLength();
private String readContentDisposition(BufferedInputStream fis) throws Exception{
byte[] b = new byte[1];
disp_counter=0;
StringBuffer sb = new StringBuffer();
while(true){
try{
fis.read(b);
disp_counter++;
sb.append(new String(b));
//mOut.println("ReadCD "+disp_counter+"="+b[0]+"<br>");
//if('\r'==b[0])
if(13==b[0]){
for(int i=1; i < 2; i++){
sb.append(new String(b));
fis.read(b);
//mOut.println("ReadCD before break="+b[0]+"<br>");
break;
}catch(IOException e){
e.printStackTrace();
//mOut.println("----disp_counter before return="+disp_counter+" STR="+sb.toString()+"----<br>");
b=null;
disp_counter += 1;
return sb.toString();
private String readNumberOfBytes(BufferedInputStream bis, int count) throws Exception{
byte[] b = new byte[count];
byte[] tmp = new byte[count];
int offset = 0;
int icount = count;
int i=0;
String tmpStr = null;
try{
while((i = bis.read(b,0,icount)) != -1){
System.arraycopy(b,0,tmp,offset,i);
tmpStr = new String( tmp );
//mOut.println( "*****"+tmpStr );
if(icount - i > 0) {
icount = count - i;
offset +=i;
continue;
else
break;
}catch(IOException e){
e.printStackTrace();
//for (i=0; i<b.length; i++)
// mOut.println("AC"+i+"="+b+"<br>");
return tmpStr;
public String parseFile( ) throws Exception {
int len = readAll(bis);
mOut.println("total len="+len+"<br>");
//in the first phase, throw away the request parameters that are not required
//in the second phase, grab the required stuff
int reallength;
int mod = 0;
int div = 0;
//get rid of the unwanted request content
reallength = getRealContentLength();//this is the orig line
//mOut.println( "reallength is " + reallength +"<br>");
//get rid of boundary and content disp header.
//int bound_len = readBoundaryLength(bis);
//String content_disp = readContentDisposition(bis);
//mOut.println( "Xbound_len" + bound_len +"<br>");
//mOut.println( "xcontent_disp" + content_disp +"<br>");
//now we are at partnos,qty
//int body = readUntilBody(bis);
if(reallength < 2048){
currentLine += readNumberOfBytes(bis,reallength);
else{
div = reallength / 2048;//buffer default size
mod = reallength % 2048;
mOut.println("div ="+div+" mod="+mod+"<br>");
for(int i=0; i < div; i++)
currentLine += readNumberOfBytes(bis,2048);
if(mod != 0)
currentLine += readNumberOfBytes(bis,mod);
//mOut.println( "currentLine" + currentLine );
//ExtractPartNumberAndQuantity();
//mOut.println("total length="+currentLine.length()+"<br>");
int lastInd = currentLine.lastIndexOf('\r');
//mOut.println("lastInd="+lastInd+"<br>");
lastInd = currentLine.lastIndexOf('\r',lastInd-1);
//mOut.println("lastInd="+lastInd+"<br>");
currentLine= currentLine.substring(0,lastInd);
//mOut.println( "currentLine="+currentLine+"<br>" );
return currentLine;
%>
<%
out.println(" request length="+request.getContentLength()+"<br>");
setInputStream(request,out);
String allLines = parseFile();
out.println("************** Parsing string starts <br>");
StringBuffer sb = new StringBuffer();
sb.append( (char)13 );
sb.append( (char)10 );
StringTokenizer st = new StringTokenizer( allLines,sb.toString());
String line = null;
// skip the first line as this is header...
if( st.hasMoreTokens() )
line = st.nextToken();
while( st.hasMoreTokens() )
line = st.nextToken();
out.println(line+"<br>");
out.flush();
%>err..
<%!
private BufferedInputStream bis = null;
int MAX_LINES = 2000;
private String currentLine = "";
//private String[] PartNumber;
//private String[] Quantity;
public int disp_counter = 0;
public int mime_counter = 0;
public int boundary_counter = 0;
private String content_diposition = null;
private HttpServletRequest request;
private javax.servlet.jsp.JspWriter mOut;
that's the problem, most likely.... the <%! part to hold all the variables. Particularly coudl've been a problem if you have multple requests at the same time.. -
How can I make Firefox 4's "File Upload" window start in the same directory across all sites?
I upload webcomic image files to multiple sites every day--the same file to multiple sites--through the "File Upload" window that comes up in Firefox when you click on a site's "Browse..." file request field.
In Firefox 3 (under Windows XP), when I used Firefox's "File Upload" window to upload files, the "File Upload" window would come up showing the last directory from which I'd uploaded anything to ANY site.
In Firefox 4, on the other hand, the "File Upload" window comes up showing the last directory from which I last uploaded to that specific domain.
I'd like to know if there's an about:config setting--I couldn't find one when searching for "file," "upload," or "dir"--to revert to the Firefox 3 behavior. The reason is that now in Firefox 4, because I typically upload two files to four different web sites per day--one file to all four sites, then later in the day, a second file to all four sites--I have to switch from the first upload directory to the second upload directory in each of the four "File Upload" windows for the second file, whereas in Firefox 3 I only had to do that once. Here's how it used to go:
In Firefox 3:
# "File Upload" for file 1 at smbhax.com: have to browse to the local directory where the file is located, since it's a different location than file 2 from the previous day.
# "File Upload" for file 1 at drunkduck.com: desired local directory is already selected.
# "File Upload" for file 1 at smackjeeves.com: desired local directory is already selected.
# "File Upload" for file 1 at comicfury.com: desired local directory is already selected.
# "File Upload" for file 2 at smbhax.com: have to browse to the local directory where the file is located, since it's a different directory than file 1.
# "File Upload" for file 2 at drunkduck.com: desired local directory is already selected.
# "File Upload" for file 2 at smackjeeves.com: desired local directory is already selected.
# "File Upload" for file 2 at comicfury.com: desired local directory is already selected.
and here's how it goes under Firefox 4:
# "File Upload" for file 1 at smbhax.com: have to browse to the local directory where the file is located, since it's a different location than file 2 from the previous day.
# "File Upload" for file 1 at drunkduck.com: have to browse to the local directory where the file is located, since it's a different location than file 2 from the previous day.
# "File Upload" for file 1 at smackjeeves.com: have to browse to the local directory where the file is located, since it's a different location than file 2 from the previous day.
# "File Upload" for file 1 at comicfury.com: have to browse to the local directory where the file is located, since it's a different location than file 2 from the previous day.
# "File Upload" for file 2 at smbhax.com: have to browse to the local directory where the file is located, since it's a different directory than file 1.
# "File Upload" for file 2 at drunkduck.com: have to browse to the local directory where the file is located, since it's a different directory than file 1.
# "File Upload" for file 2 at smackjeeves.com: have to browse to the local directory where the file is located, since it's a different directory than file 1.
# "File Upload" for file 2 at comicfury.com: have to browse to the local directory where the file is located, since it's a different directory than file 1.
So basically, where under Firefox 3 I only had to browse through my directories twice per day to upload two files to four sites, under Firefox 4, I have to browse through my directories eight times per day to accomplish the same thing.You can use the Remember Password bookmarklet: <br />
https://www.squarefree.com/bookmarklets/forms.html#remember_password <br /> ''Has worked for me when I have needed it to save a password on a web site that used autocomplete=off.'' As far as the Bug that '''cor-el''' linked, I can't remember ever running across a website that did it like that.
Or, you can use the Saved Password Editor extension, which includes a means of manually adding Username/Passwords to Firefox. <br />
https://addons.mozilla.org/en-US/firefox/addon/60265 -
Hi. I’ve set up a web form that uses html and javascript. This particular form lets you upload files. I also have another page that lets you play videos. I was wondering if anyone knows how to make the inner html of for example the upload file form field equal the file that is played by the video player on the other page.
Basically on youtube when you upload a video it automatically makes another page with the video file you uploaded assigned to the video player on that page. I want to know how to go about doing that. So people can upload videos and then be able to watch them instantly without me manually having to create the page an assigning the right file to the page.
Even just knowing how to create a different page each time the form is submitted would be helpful. Thanks.This is more complex than you realize and JavaScript alone can't do it. You'll need a server-side script like PHP to authenticate and sanitize file uploads to prevent malicious scripts or malware from ever getting to your server. Then, your script will have to process the uploaded file by saving it to a folder or database, give it a unique ID and then redirect users to a new page that pulls the file into an HTML5 or similar player. How good are you with server-side programming?
Nancy O. -
Image / file upload error cannot upload image even after setting write permissions
Hi there everyone
I am having this problem when I try to upload a file (image file) to my server
I have a dynamic for working fine , all the other fields insert the information ok then I try to add an image upload behaviour to a file field
When I try to upload the file I get this error
Error:
An error occurred while inserting the records.
File upload error: File upload error. Error creating folder..
File upload error. Internal error.
Developer Details:
tNG_multipleInsert error.
An error occurred while inserting the records. (MINS_ERROR)
File upload error: PHP_UPLOAD_FOLDER_ERROR
File Upload Error. No write permissions in "../../productimages/" folder.
(FILE_UPLOAD_ERROR)
So I login to my server and change the write permissions to 777 and then try again and get the same message
I have closed DW and tried again and still get the same message......
I think I have followed all the steps correctly..... I have done the same type of forms many time and tested them locally on WAMP testing server and all work ok......
So..... Anyone got any ideas
Any help would be great
Have a nice dayOn 5/17/07 4:26 PM, in article [email protected],
"Gü[email protected]" <> wrote:
>
> To my experience servers behave differently -- on some I really had to use
> 777, others are happy with 755.
>
> in regards to "any user" :: On most ADDT respectively MX Kollection - based
> backends I made the image & file upload feature available to user having e.g.
> the "levels" 1 & 2, but not 3 -- I wouldn´t expose something like this to all
> users
>
> Günter Schenk
> Adobe Community Expert, Dreamweaver
My backend is only for admin, so they are the only ones who can access the
upload pages. My concern is an images folder on the site being 777. Can't
anyone from the outside plant a file in that folder if they just know where
to find it using an ftp program? ? -
File upload....How to find the user entered any file or not
Hi Team,
I am working on with file upload UI.
Some times without clicking on browse button, I mean without entering any file they are cliking on upload button, which is giving the exception.
I know there is no action for UI element, Then how to resolve this?
I just control the user, not to press the upload button without entering any file name there?
How to resolve this?
regards,
BalaHi,
This code will solve ur problem.
public void onActionUploadFile(com.sap.tc.webdynpro.progmodel.api.IWDCustomEvent wdEvent )
//@@begin onActionUploadFile(ServerEvent)
IWDAttributeInfo attributeInfo = wdContext.getNodeInfo().getAttribute(IPrivateFileUploadDownloadView.IContextElement.FILE_RESOURCE);
IWDModifiableBinaryType binaryType = (IWDModifiableBinaryType)attributeInfo.getModifiableSimpleType();
IPrivateFileUploadDownloadView.IContextElement element = wdContext.currentContextElement();
if(element.getFileResource() !=null)
try
String mimeType = binaryType.getMimeType().toString();
byte[] file = element.getFileResource();
//element.s
wdComponentAPI.getMessageManager().reportMessage(IMessageFileUploadDownloadComp.SF__UPLOAD,new Object[] {binaryType.getFileName()},false);
catch(Exception e)
throw new WDRuntimeException(e);
else
wdComponentAPI.getMessageManager().reportMessage(IMessageFileUploadDownloadComp.NO__FILE,new Object[] {" "},true);
//@@end
Here "fileresource" is context attribute name
Regards,
Sunaina Reddy T -
Problem with Multi File upload example, help needed
I got the code from the following location.....
http://www.adobe.com/devnet/coldfusion/articles/multifile_upload.html
And I've got it to work to some degree except I cant get the file transfer to work when pressing, Upload. Below is what my debugger outputs. Any thoughts on how to fix this or even what it means?
At the very bottom of this message is the upload.cfm code.......
Thanks in advance for the help
<html>
<head>
<title>Products - Error</title>
</head>
<body>
<h2>Sorry</h2>
<p>An error occurred when you requested this page.
Please email the Webmaster to report this error.
We will work to correct the problem and apologize
for the inconvenience.</p>
<table border=1>
<tr><td><b>Error Information</b> <br>
Date and time: 12/07/09 22:25:51 <br>
Page: <br>
Remote Address: 67.170.79.241 <br>
HTTP Referer: <br>
Details: ColdFusion cannot determine how to process the tag <CFDOCUMENT>. The tag name may be misspelled.<p>If you are using tags whose names begin with CF but are not ColdFusion tags you should contact Allaire Support. <p>The error occurred while processing an element with a general identifier of (CFDOCUMENT), occupying document position (41:4) to (41:70).<p>The specific sequence of files included or processed is:<code><br><strong>D:\hshome\edejham7\edeweb.com\MultiFileUpload\upload.cfm </strong></code><br>
<br>
</td></tr></table>
</body>
</html>
<!---
Flex Multi-File Upload Server Side File Handler
This file is where the upload action from the Flex Multi-File Upload UI points.
This is the handler the server side half of the upload process.
--->
<cftry>
<!---
Because flash uploads all files with a binary mime type ("application/ocet-stream") we cannot set cffile to accept specfic mime types.
The workaround is to check the file type after it arrives on the server and if it is non desireable delete it.
--->
<cffile action="upload"
filefield="filedata"
destination="#ExpandPath('\')#MultiFileUpload\uploadedfiles\"
nameconflict="makeunique"
accept="application/octet-stream"/>
<!--- Begin checking the file extension of uploaded files --->
<cfset acceptedFileExtensions = "jpg,jpeg,gif,png,pdf,flv,txt,doc,rtf"/>
<cfset filecheck = listFindNoCase(acceptedFileExtensions,File.ServerFileExt)/>
<!---
If the variable filecheck equals false delete the uploaded file immediatley as it does not match the desired file types
--->
<cfif filecheck eq false>
<cffile action="delete" file="#ExpandPath('\')#MultiFileUpload\uploadedfiles\#File.ServerFile#"/>
</cfif>
<!---
Should any error occur output a pdf with all the details.
It is difficult to debug an error from this file because no debug information is
diplayed on page as its called from within the Flash UI. If your files are not uploading check
to see if an errordebug.pdf has been generated.
--->
<cfcatch type="any">
<cfdocument format="PDF" overwrite="yes" filename="errordebug.pdf">
<cfdump var="#cfcatch#"/>
</cfdocument>
</cfcatch>
</cftry>Just 2 things in my test:
1) I use no accept attribute. Coldfusion is then free to upload any extenstion.
Restricting the type to application/octet-stream may generate errors. Also, it is unnecessary, because we perform a type check anyway.
2) I have used #ExpandPath('.')#\ in place of #ExpandPath('\')#
<cfif isdefined("form.filedata")>
<cftry>
<cffile action="upload"
filefield="filedata"
destination="#expandPath('.')#\MultiFileUpload\uploadedfiles\"
nameconflict="makeunique">
<!--- Begin checking the file extension of uploaded files --->
<cfset acceptedFileExtensions = "jpg,jpeg,gif,png,pdf,flv,txt,doc,rtf"/>
<cfset filecheck = listFindNoCase(acceptedFileExtensions,File.ServerFileExt)/>
<!---
If the variable filecheck equals false delete the uploaded file immediatley as it does not match the desired file types
--->
<cfif filecheck eq false>
<cffile action="delete" file="#ExpandPath('.')#\MultiFileUpload\uploadedfiles\#File.ServerFile#"/>
<cfoutput>Uploaded file deleted -- unacceptable extension (#ucase(File.ServerFileExt)#)</cfoutput>.<br>
</cfif>
Upload process done!
<cfcatch type="any">
There was an error!
<cfdocument format="PDF" overwrite="yes" filename="errordebug.pdf">
<cfdump var="#cfcatch#"/>
</cfdocument>
</cfcatch>
</cftry>
<cfelse>
<form method="post" action=<cfoutput>#cgi.script_name#</cfoutput>
name="uploadForm" enctype="multipart/form-data">
<input name="filedata" type="file">
<br>
<input name="submit" type="submit" value="Upload File">
</form>
</cfif> -
Rename file extension during a file upload ??
I need to rename the extension of a file at some point during the file upload. I am not sure where to do this at.
The file needs to be renamed before it is written to the directory.
Basically, the file will come in with a .txt or .doc type. Based on a users profile, I will change the type to a non-relavent number such as 1111.
Here is my upload servlet. Can you tell me where to change the type so it will write the file with the new extension?
Thanks.
public class FileExport {
//restrict upload files to 1 Meg
private static final int DEFAULT_MAX_POST_SIZE = 1024 * 1024;
private static final String NO_FILE = "unknown";
private HttpServletRequest req;
private File dir;
private int maxSize;
private Hashtable parameters = new Hashtable(); // name - Vector of values
private Hashtable files = new Hashtable(); // name - UploadedFile
public FileExport(HttpServletRequest request,
String saveDirectory) throws IOException {
this(request, saveDirectory, DEFAULT_MAX_POST_SIZE);
// request the servlet request
// saveDirectory = directory in which to save any uploaded files
// maxPostSize = maximum size of the POST content
public FileExport(HttpServletRequest request,
String saveDirectory,
int maxPostSize) throws IOException {
// check values
if (request == null)
throw new IllegalArgumentException("request cannot be null");
if (saveDirectory == null)
throw new IllegalArgumentException("saveDirectory cannot be null");
if (maxPostSize <= 0) {
throw new IllegalArgumentException("maxPostSize must be positive");
// Save the request, dir, and max size
req = request;
dir = new File(saveDirectory);
maxSize = maxPostSize;
// Check saveDirectory is truly a directory
if (!dir.isDirectory())
throw new IllegalArgumentException("Not a directory: " + saveDirectory);
// Check saveDirectory is writable
if (!dir.canWrite())
throw new IllegalArgumentException("Not writable: " + saveDirectory);
// Now parse the request saving data to "parameters" and "files";
// write the file contents to the saveDirectory
readRequest();
public FileExport(ServletRequest request,
String saveDirectory) throws IOException {
this((HttpServletRequest)request, saveDirectory);
public FileExport(ServletRequest request,
String saveDirectory,
int maxPostSize) throws IOException {
this((HttpServletRequest)request, saveDirectory, maxPostSize);
// Returns the names of all the parameters as an Enumeration of
// Strings. It returns an empty Enumeration if there are no parameters.
public Enumeration getParameterNames() {
return parameters.keys();
// Returns the names of all the uploaded files as an Enumeration of
// Strings. It returns an empty Enumeration if there are no uploaded
// files. Each file name is the name specified by the form, not by
// the user.
public Enumeration getFileNames() {
return files.keys();
// Returns the value of the named parameter as a String, or null if
// the parameter was not sent or was sent without a value.
public String getParameter(String name) {
try {
Vector values = (Vector)parameters.get(name);
if (values == null || values.size() == 0) {
return null;
String value = (String)values.elementAt(values.size() - 1);
return value;
catch (Exception e) {
return null;
// Returns the values of the named parameter as a String array, or null if
// the parameter was not sent.
public String[] getParameterValues(String name) {
try {
Vector values = (Vector)parameters.get(name);
if (values == null || values.size() == 0) {
return null;
String[] valuesArray = new String[values.size()];
values.copyInto(valuesArray);
return valuesArray;
catch (Exception e) {
return null;
// Returns the filesystem name of the specified file, or null if the
// file was not included in the upload. A filesystem name is the name
// specified by the user. It is also the name under which the file is
// actually saved.
public String getFilesystemName(String name) {
try {
UploadedFile file = (UploadedFile)files.get(name);
return file.getFilesystemName(); // may be null
catch (Exception e) {
return null;
// Returns the content type of the specified file (as supplied by the
//client browser), or null if the file was not included in the upload.
public String getContentType(String name) {
try {
UploadedFile file = (UploadedFile)files.get(name);
return file.getContentType(); // may be null
catch (Exception e) {
return null;
// Returns a File object for the specified file saved on the server's
// filesystem, or null if the file was not included in the upload.
public File getFile(String name) {
try {
UploadedFile file = (UploadedFile)files.get(name);
return file.getFile(); // may be null
catch (Exception e) {
return null;
// method that actually parses the request.
protected void readRequest() throws IOException {
// Check the content length to prevent denial of service attacks
int length = req.getContentLength();
if (length > maxSize) {
throw new IOException("Posted content length of " + length +
" exceeds limit of " + maxSize);
// Check the content type to make sure it's "multipart/form-data"
// Access header two ways to work around WebSphere oddities
String type = null;
String type1 = req.getHeader("Content-Type");
String type2 = req.getContentType();
// If one value is null, choose the other value
if (type1 == null && type2 != null) {
type = type2;
else if (type2 == null && type1 != null) {
type = type1;
// If neither value is null, choose the longer value
else if (type1 != null && type2 != null) {
type = (type1.length() > type2.length() ? type1 : type2);
if (type == null ||
!type.toLowerCase().startsWith("multipart/form-data")) {
throw new IOException("Posted content type isn't multipart/form-data");
// Get the boundary string; it's included in the content type.
// Should look something like "------------------------12012133613061"
String boundary = extractBoundary(type);
if (boundary == null) {
throw new IOException("Separation boundary was not specified");
// Construct the special input stream we'll read from
MultipartInputStreamHandler in =
new MultipartInputStreamHandler(req.getInputStream(), length);
// Read the first line, should be the first boundary
String line = in.readLine();
if (line == null) {
throw new IOException("Corrupt form data: premature ending");
// Verify that the line is the boundary
if (!line.startsWith(boundary)) {
throw new IOException("Corrupt form data: no leading boundary");
// Now that we're just beyond the first boundary, loop over each part
boolean done = false;
while (!done) {
done = readNextPart(in, boundary);
// A utility method that reads an individual part. Dispatches to
// readParameter() and readAndSaveFile() to do the actual work. A
// subclass can override this method for a better optimized or
// differently behaved implementation.
protected boolean readNextPart(MultipartInputStreamHandler in,
String boundary) throws IOException {
// Read the first line, should look like this:
// content-disposition: form-data; name="field1"; filename="file1.txt"
String line = in.readLine();
if (line == null) {
// No parts left, we're done
return true;
else if (line.length() == 0) {
// IE4 on Mac sends an empty line at the end; treat that as the end.
// Thanks to Daniel Lemire and Henri Tourigny for this fix.
return true;
// Parse the content-disposition line
String[] dispInfo = extractDispositionInfo(line);
String disposition = dispInfo[0];
String name = dispInfo[1];
String filename = dispInfo[2];
// Now onto the next line. This will either be empty
// or contain a Content-Type and then an empty line.
line = in.readLine();
if (line == null) {
// No parts left, we're done
return true;
// Get the content type, or null if none specified
String contentType = extractContentType(line);
if (contentType != null) {
// Eat the empty line
line = in.readLine();
if (line == null || line.length() > 0) { // line should be empty
throw new
IOException("Malformed line after content type: " + line);
else {
// Assume a default content type
contentType = "application/octet-stream";
// Now, finally, we read the content (end after reading the boundary)
if (filename == null) {
// This is a parameter, add it to the vector of values
String value = readParameter(in, boundary);
if (value.equals("")) {
value = null; // treat empty strings like nulls
Vector existingValues = (Vector)parameters.get(name);
if (existingValues == null) {
existingValues = new Vector();
parameters.put(name, existingValues);
existingValues.addElement(value);
else {
// This is a file
readAndSaveFile(in, boundary, filename, contentType);
if (filename.equals(NO_FILE)) {
files.put(name, new UploadedFile(null, null, null));
else {
files.put(name,
new UploadedFile(dir.toString(), filename, contentType));
return false; // there's more to read
// A utility method that reads a single part of the multipart request
// that represents a parameter. A subclass can override this method
// for a better optimized or differently behaved implementation.
protected String readParameter(MultipartInputStreamHandler in,
String boundary) throws IOException {
StringBuffer sbuf = new StringBuffer();
String line;
while ((line = in.readLine()) != null) {
if (line.startsWith(boundary)) break;
sbuf.append(line + "\r\n"); // add the \r\n in case there are many lines
if (sbuf.length() == 0) {
return null; // nothing read
sbuf.setLength(sbuf.length() - 2); // cut off the last line's \r\n
return sbuf.toString(); // no URL decoding needed
// A utility method that reads a single part of the multipart request
// that represents a file, and saves the file to the given directory.
// A subclass can override this method for a better optimized or
// differently behaved implementation.
protected void readAndSaveFile(MultipartInputStreamHandler in,
String boundary,
String filename,
String contentType) throws IOException {
OutputStream out = null;
// A filename of NO_FILE means no file was sent, so just read to the
// next boundary and ignore the empty contents
if (filename.equals(NO_FILE)) {
out = new ByteArrayOutputStream(); // write to nowhere
// A MacBinary file goes through a decoder
else if (contentType.equals("application/x-macbinary")){
File f = new File(dir + File.separator + filename);
out = new MacBinaryDecoderOutputStream(
new BufferedOutputStream(
new FileOutputStream(f), 8 * 1024));
// A real file's contents are written to disk
else {
File f = new File(dir + File.separator + filename);
out = new BufferedOutputStream(new FileOutputStream(f), 8 * 1024);
byte[] bbuf = new byte[100 * 1024]; // 100K
int result;
String line;
// ServletInputStream.readLine()
// adds a \r\n to the end of the last line.
// Since we want a byte-for-byte transfer, we have to cut those chars.
boolean rnflag = false;
while ((result = in.readLine(bbuf, 0, bbuf.length)) != -1) {
// Check for boundary
if (result > 2 && bbuf[0] == '-' && bbuf[1] == '-') { // quick pre-check
line = new String(bbuf, 0, result, "ISO-8859-1");
if (line.startsWith(boundary)) break;
// Are we supposed to write \r\n for the last iteration?
if (rnflag) {
out.write('\r'); out.write('\n');
rnflag = false;
// Write the buffer, postpone any ending \r\n
if (result >= 2 &&
bbuf[result - 2] == '\r' &&
bbuf[result - 1] == '\n') {
out.write(bbuf, 0, result - 2); // skip the last 2 chars
rnflag = true; // make a note to write them on the next iteration
else {
out.write(bbuf, 0, result);
out.flush();
out.close();
// Extracts and returns the boundary token from a line.
private String extractBoundary(String line) {
// Use lastIndexOf() because IE 4.01 on Win98 has been known to send the
// "boundary=" string multiple times. Thanks to David Wall for this fix.
int index = line.lastIndexOf("boundary=");
if (index == -1) {
return null;
String boundary = line.substring(index + 9); // 9 for "boundary="
// The real boundary is always preceeded by an extra "--"
boundary = "--" + boundary;
return boundary;
// Extracts and returns disposition info from a line, as a String array
// with elements: disposition, name, filename. Throws an IOException
// if the line is malformatted.
private String[] extractDispositionInfo(String line) throws IOException {
// Return the line's data as an array: disposition, name, filename
String[] retval = new String[3];
// Convert the line to a lowercase string without the ending \r\n
// Keep the original line for error messages and for variable names.
String origline = line;
line = origline.toLowerCase();
// Get the content disposition, should be "form-data"
int start = line.indexOf("content-disposition: ");
int end = line.indexOf(";");
if (start == -1 || end == -1) {
throw new IOException("Content disposition corrupt: " + origline);
String disposition = line.substring(start + 21, end);
if (!disposition.equals("form-data")) {
throw new IOException("Invalid content disposition: " + disposition);
// Get the field name
start = line.indexOf("name=\"", end); // start at last semicolon
end = line.indexOf("\"", start + 7); // skip name=\"
if (start == -1 || end == -1) {
throw new IOException("Content disposition corrupt: " + origline);
String name = origline.substring(start + 6, end);
// Get the filename, if given
String filename = null;
start = line.indexOf("filename=\"", end + 2); // start after name
end = line.indexOf("\"", start + 10); // skip filename=\"
if (start != -1 && end != -1) { // note the !=
filename = origline.substring(start + 10, end);
// The filename may contain a full path. Cut to just the filename.
int slash =
Math.max(filename.lastIndexOf('/'), filename.lastIndexOf('\\'));
if (slash > -1) {
filename = filename.substring(slash + 1); // past last slash
if (filename.equals("")) filename = NO_FILE; // sanity check
// Return a String array: disposition, name, filename
retval[0] = disposition;
retval[1] = name;
retval[2] = filename;
return retval;
// Extracts and returns the content type from a line, or null if the
// line was empty. Throws an IOException if the line is malformatted.
private String extractContentType(String line) throws IOException {
String contentType = null;
// Convert the line to a lowercase string
String origline = line;
line = origline.toLowerCase();
// Get the content type, if any
if (line.startsWith("content-type")) {
int start = line.indexOf(" ");
if (start == -1) {
throw new IOException("Content type corrupt: " + origline);
contentType = line.substring(start + 1);
else if (line.length() != 0) { // no content type, so should be empty
throw new IOException("Malformed line after disposition: " + origline);
return contentType;
// A class to hold information about an uploaded file.
class UploadedFile {
private String dir;
private String filename;
private String type;
UploadedFile(String dir, String filename, String type) {
this.dir = dir;
this.filename = filename;
this.type = type;
public String getContentType() {
return type;
public String getFilesystemName() {
return filename;
public File getFile() {
if (dir == null || filename == null) {
return null;
else {
return new File(dir + File.separator + filename);
// A class to aid in reading multipart/form-data from a ServletInputStream.
// It keeps track of how many bytes have been read and detects when the
// Content-Length limit has been reached.
class MultipartInputStreamHandler {
ServletInputStream in;
int totalExpected;
int totalRead = 0;
byte[] buf = new byte[8 * 1024];
public MultipartInputStreamHandler(ServletInputStream in,
int totalExpected) {
this.in = in;
this.totalExpected = totalExpected;
// Reads the next line of input. Returns null to indicate the end
// of stream.
public String readLine() throws IOException {
StringBuffer sbuf = new StringBuffer();
int result;
String line;
do {
result = this.readLine(buf, 0, buf.length); // this.readLine() does +=
if (result != -1) {
sbuf.append(new String(buf, 0, result, "ISO-8859-1"));
} while (result == buf.length); // loop only if the buffer was filled
if (sbuf.length() == 0) {
return null; // nothing read, must be at the end of stream
sbuf.setLength(sbuf.length() - 2); // cut off the trailing \r\n
return sbuf.toString();
// A pass-through to ServletInputStream.readLine() that keeps track
// of how many bytes have been read and stops reading when the
// Content-Length limit has been reached.
public int readLine(byte b[], int off, int len) throws IOException {
if (totalRead >= totalExpected) {
return -1;
else {
if (len > (totalExpected - totalRead)) {
len = totalExpected - totalRead; // keep from reading off end
int result = in.readLine(b, off, len);
if (result > 0) {
totalRead += result;
return result;
// Class to filters MacBinary files to normal files on the fly
// Optimized for speed more than readability
class MacBinaryDecoderOutputStream extends FilterOutputStream {
int bytesFiltered = 0;
int dataForkLength = 0;
public MacBinaryDecoderOutputStream(OutputStream out) {
super(out);
public void write(int b) throws IOException {
// Bytes 83 through 86 are a long representing the data fork length
// Check <= 86 first to short circuit early in the common case
if (bytesFiltered <= 86 && bytesFiltered >= 83) {
int leftShift = (86 - bytesFiltered) * 8;
dataForkLength = dataForkLength | (b & 0xff) << leftShift;
// Bytes 128 up to (128 + dataForkLength - 1) are the data fork
else if (bytesFiltered < (128 + dataForkLength) && bytesFiltered >= 128) {
out.write(b);
bytesFiltered++;
public void write(byte b[]) throws IOException {
write(b, 0, b.length);
public void write(byte b[], int off, int len) throws IOException {
// If the write is for content past the end of the data fork, ignore
if (bytesFiltered >= (128 + dataForkLength)) {
bytesFiltered += len;
// If the write is entirely within the data fork, write it directly
else if (bytesFiltered >= 128 &&
(bytesFiltered + len) <= (128 + dataForkLength)) {
out.write(b, off, len);
bytesFiltered += len;
// Otherwise, do the write a byte at a time to get the logic above
else {
for (int i = 0 ; i < len ; i++) {
write(b[off + i]);I am also need to rename a file and extension while uploadinf the file to the server. The oreilly example seems only save as the same file name and ext. I wonder if you have the ability chANGE OIT OR NOT. pLEASE LET ME KNOW
thanks
kansen -
File Upload problem: JSF, IBM WPS and Portlet - Please HELP Vey Very Urgent
I want to upload a file from the front end using JSF and Portlets deployed on IBM WebSphere Portal.
I have used Apache's commons file upload functionality as the file upload provided in JSF doesnot work with portlets and the action event is not invoked If I keep enctype="multipart/form-data". So I included 3 forms in my Faces JSP file.
1) h:form = For displyign error message on screen
2) html:form = Include the enctype="multipart/form-data" and the input type file for uploading. And a submit button
3) h:form: Here I have a command link which is remotely excuted on click of sumit button in my html form. This is to invoke the action event in the pagecode to get the bean value from the context.
Now in the my doView method in the portlet, isMultipartContent(httpservletrequest) always returns null as the content type is text/html and not multipart. Onclick of the submit button in the the html form I am calling a javascript function which sets the __LINK_TARGET__ to the command link in the 3rd h:form which will call the page code.
The problem here is action is invoked only when I return false from the above javascript else it will trigger for the first time and from second time onwards it will not invoke the action event in the pagecode method. Whent the javascript function returns false, the content type is always text/html. However if I return "true" from the javascript the content type is multipart/form-data, but the action is not triggered for the second time. So basically when the javascript functions returns true, for the first click everything works perfectly. When it returns false, the content type is text/html, but the action is invoked in the page code every time.
Returning always true would solve my problem with the content type, but the action with the command link will not get invoked always as its some type of problem with h:commanLink :(.
I guess I gave too much info. Heres my code stepby step.
Can somebody please tell me , how I should also invoke the action in the page code and get the content type as "multipart/form-data" at the same time.
1:
======================= Faces JSP File: BPSMacro.jsp ====================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="GENERATOR" content="IBM Software Development Platform">
<meta http-equiv="Content-Style-Type" content="text/css">
<%@taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
<%@taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%>
<%@taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@taglib uri="http://www.ibm.com/jsf/html_extended" prefix="hx"%>
<%@taglib uri="/WEB-INF/tld/j4j.tld" prefix="j4j"%>
<%@taglib uri="/WEB-INF/tld/core.tld" prefix="core"%>
<%@page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1" session="false"%>
<portlet:defineObjects />
<link rel="stylesheet" type="text/css"
href='<%= renderResponse.encodeURL(renderRequest.getContextPath() + "/theme/stylesheet.css") %>'
title="Style">
<script type="text/javascript">
function formSubmit() {
var formName2 = document.getElementById("proxy_form_main_").title;
var formName1 = document.getElementById("BPSMacroFormId").title;
document.getElementById("__LINK_TARGET__").value = document.getElementById("proxy_HD_COMMAND_").title;
document.getElementById(formName2).submit();
return false;
</script>
<f:view>
<hx:scriptCollector id="bpsMacroScriptCollector">
<f:loadBundle var="bps" basename="bordereauprocessingsystem" />
<table bgcolor="#FFF9C3">
<tr>
<td><h:form id="BPSMacroFormMain" styleClass="form">
<table class="tablemiddle" cellspacing="0" cellpadding="0">
<tr>
<td><h:messages layout="table" styleClass="errormessage"
id="ValidationErrorMsg" /> </td>
</tr>
</table>
<j4j:idProxy id="proxy_form_main_0_" />
</h:form></td>
</tr>
<tr>
<td>
<form id="BPSMacroFormId" enctype="multipart/form-data">
<table bgcolor="#FFF9C3">
<tr>
<td height="36" width="324">Worksheet <input type="file"
name="upfile" /></td>
</tr>
<tr>
<td align="center" width="324"><input TYPE="submit"
onclick="return formSubmit();" value="Upload">
</td>
</tr>
</table>
</form>
</td>
</tr>
<tr>
<td>
<h:form id="BPSMacroFormMain2" styleClass="form">
<table cellspacing="2" cellpadding="2" class="tablemiddle">
<tbody>
<tr>
<td colspan="2" align="center"><h:commandLink
styleClass="commandLink" id="lnkuserdelete"
action="#{pc_BPSMacro.doIdUpload1Action}">
<hx:graphicImageEx
styleClass="graphicImageEx" id="imgBtnCreateUser"
value="/theme/images/btnUpload.gif" style="border:0;cursor:pointer"></hx:graphicImageEx>
<j4j:idProxy id="proxy_HD_COMMAND_" />
</h:commandLink></td>
<h:inputHidden id="dtSize"
value="#{pc_BPSMacro.fileDetailsList.clicked}">
<j4j:idProxy id="proxy_clicked_" />
</h:inputHidden>
</tr>
</tbody>
</table>
<j4j:idProxy id="proxy_form_main_" />
</h:form>
</td>
</tr>
</table>
</hx:scriptCollector>
</f:view>
================== END: FACES JSP FILE: BPSMacro.jsp ========================
2:
=================== Action event in the Page Code: BPSMacro.java ============
public String doIdUpload1Action() {
System.out.println("PageCode");
FacesContext context = FacesContext.getCurrentInstance();
BPSMacroDetailsDataBean fileDetails = (BPSMacroDetailsDataBean)context.getApplication().createValueBinding("#{fileDetails}").getValue(context);
BPSMacroListDataBean fileDetailsList = (BPSMacroListDataBean)context.getApplication().createValueBinding("#{fileDetailsList}").getValue(context);
PortletSession sess = (PortletSession)context.getExternalContext().getSession(false);
sess.setAttribute("BPS_MACRO_CONTEXT", context, PortletSession.APPLICATION_SCOPE);
sess.setAttribute("BPS_MACRO_FILE_DETAILS", fileDetails, PortletSession.APPLICATION_SCOPE);
sess.setAttribute("BPS_MACRO_FILE_LIST", fileDetailsList, PortletSession.APPLICATION_SCOPE);
HttpServletRequest request = (HttpServletRequest)context.getExternalContext().getRequest();
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
request.getContentType();
return "gotoBPSMacro";
============== END Of Page Code Action event ==============================
3:
============== doView() Portlet method ================================
public void doView(RenderRequest arg0, RenderResponse arg1)
throws PortletException, IOException {
String METHOD_NAME = "doView(RenderRequest arg0, RenderResponse arg1)";
Logger.debug(this.getClass(), METHOD_NAME, "Entering BPSMacroPortlet");
FacesContext context = FacesContext.getCurrentInstance();
PortletSession sess1 = arg0.getPortletSession(true);
BPSMacroDetailsDataBean fileDetails = new BPSMacroDetailsDataBean();
BPSMacroListDataBean fileDetailsList = new BPSMacroListDataBean();
context = (FacesContext)sess1.getAttribute("BPS_MACRO_CONTEXT", PortletSession.APPLICATION_SCOPE);
if(context != null){
fileDetails = (BPSMacroDetailsDataBean)sess1.getAttribute("BPS_MACRO_FILE_DETAILS", PortletSession.APPLICATION_SCOPE);
fileDetailsList = (BPSMacroListDataBean)sess1.getAttribute("BPS_MACRO_FILE_LIST", PortletSession.APPLICATION_SCOPE);
sess1.removeAttribute("BPS_MACRO_CONTEXT", PortletSession.APPLICATION_SCOPE);
sess1.removeAttribute("BPS_MACRO_FILE_DETAILS", PortletSession.APPLICATION_SCOPE);
sess1.removeAttribute("BPS_MACRO_FILE_LIST", PortletSession.APPLICATION_SCOPE);
HttpServletRequest servletRequest = (HttpServletRequest)arg0;
PortletRequest pReq = (PortletRequest)arg0;
HttpServletResponse servletResponse= (HttpServletResponse)arg1;
System.out.println("\n\n Content Type" + servletRequest.getContentType());
try{
if(context != null){
boolean isFileMultipart = ServletFileUpload.isMultipartContent(servletRequest);
System.out.println("\nFILE TO BE UPLOADED IS MULTIPART ? " + isFileMultipart);
if(isFileMultipart){
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List items = upload.parseRequest(servletRequest);
Iterator iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();
InputStream iStream = item.getInputStream();
ByteArrayOutputStream ByteArrayOS = new ByteArrayOutputStream();
int sizeofFile =(int) item.getSize();
byte buffer[] = new byte[sizeofFile];
int bytesRead = 0;
while( (bytesRead = iStream.read(buffer, 0, sizeofFile)) != -1 )
ByteArrayOS.write( buffer, 0, bytesRead );
String data = new String( ByteArrayOS.toByteArray() );
int k = 0;
//Check if the file is Refund or Premium
int dynamicArraySize = 0;// = st2.countTokens() * 9;
dynamicArraySize = st2.countTokens() * 9;
if (!item.isFormField() ){
File cfile=new File(item.getName());
String fileName = "";
String separator = "\\";
int pos = item.getName().lastIndexOf(separator);
int pos2 = item.getName().lastIndexOf(".");
if(pos2>-1){
fileName =item.getName().substring(pos+1, pos2);
}else{
fileName =item.getName().substring(pos+1);
File fileToBeUploaded=new File("C:\\Sal\\BPS MACRO\\FileTransfer\\Desti", fileName);
item.write(fileToBeUploaded);
validate.displaySuccessMessage(context);
}catch(Exception e){System.out.println(e);
Logger.debug(this.getClass(), METHOD_NAME, "Leaving BPSMacroPortlet");
super.doView(arg0, arg1);
==== END: doView method in the portle class. ================================
Thanks.one more question. Is there a way where I can submit two forms ?
Thats is submit 2nd form only when the first form is submitted.
I tried this it works.
function formSubmit(){
document.form1.submit();
alert();
document.form2.submit();
But If I dont put an alert(basically it disables the parent page) in between, only the second form is submitted.
If I put a delay of say 3 seconds in between then it will throw a SOCKET CLOSED error in the code triggered due to first form submit.
Thus disabling the paresnt page for a few seconds is reolving my problem.
Any ideas ?
Well Basically when the Alert pop's up the parent page "STALLS" and thus the form2 does not submit till I click on OK, Is there a way I can stall the browser/Parent JSP page using JAVA SCRIPT ??
Edited by: hector on Oct 9, 2007 11:09 AM
Edited by: hector on Oct 9, 2007 2:12 PM -
Reliable file upload using JDev, AS and other
Hello,
I'm not sure this is the right place to post this message, sorry if I was wrong to put it here.
The question is our company is developing software, for active data exchange with other systems. We decided to exchange in xml format, by means of both web services and web interface (so that exchange could happen both automatically and on user request). We use JDev to develop, Oracle AS to deploy application. Systems we exchange can use various platforms, in fact, it doesn't matter what exactly they use. The question is we need a reliable way to exchange large (sometimes small, but can be 1Gb or, for example, 10Gb) files, maybe with appropriate security, so that it could continue if something happens with network connection.
One simple decision is to have a web service that accepts, for example, 100K at a time, and another service continuously calls it until file is transfered. So it can check response code. But are there better decisions? I think, there are libraries or smth like this?
Thanks in advance, believe, it's a right place to get help.
ValeriyAnother, simpler (we think), such package is Jenkov HTTP Multipart File Upload. It's a servlet filter which can work in front of both servlets and JSP's. The servlet filter parses the uploaded file and stores it temporarily on the servers disk. When the servlet or JSP executes afterwards, it can obtain all the information about the file, from the request attributes. There is a decent manual for HTTP Multipart File Upload on the website.
Just search for "Jenkov HTTP Multipart" on Google and you'll find it. HTTP Multipart is free, open source, Apache Licsense. -
hi hr gurus,
plz help
we have 3 shifts like 6-2,2-10,10-6.
while uploading time data to sap from third party system.
do we need to take care of the shifts times in BDC?
or do we need to manage it in configurations
if you have any code please send me
regardsHi,
As above said was the also procedure to do the BDC recording.Hope you understand the precedure in detail else have a look @ this.
1.Goto transaction shdb for recording.
2.There give the recording name starting with Z or Y letter.
3.Click "New Recording" button in the left extreme Application tool bar.
4.You will get a new pop up window Create Recording there give Recording Name"Z r Y" and give the transaction code that you going to record for e.g (PA30,XK01).
5.Leave the Mode as it is and click "Start Recording".
6.Here you will get the transaction code window for e.g if you are giving PA30 it will call the corresponding transaction.
7.Start recording by entering the values which you want to record.
8.After recording save the recording and give back.
9.There you find the list of process which is done.
10.Enter your recording name and press enter you will get the program name.
11.Select the program name and press "program" button in the application tool bar.It will ask abt the prgm name and give read from file.
12.You will get the coding in se38 for recording.
13.Edit your program for uploading the flat file from you legacy system to application server by using CALL FUNCTION "GUI_UPLOAD".
14.Get the flat file and fill it in internal table and pass the internal table values by giving "loop at internal table" after READ DATASET statement.
15.Select the call transaction for small no. of data for large no. of data we have to use session method.(Refer some links for difference between session and call transaction).
16.There by executing the program we will get the output which record are created.
Thanks,
Sakthi.C
*Rewards if usefull--* -
Hi,
File Upload Page now keeps hanging up every time I want to do an attachment in Gmail. This problem only started yesterday. Was fine before that.
I have done a Virus scan with ClamX and removed x3 Phising files and also a Malware scan and removed something called 'Genieo' omnibar.safariextz These are now all in trash.
I had to upload new driver for my Fuji Printer yesterday. Also was trying to do an online form for a Credit File firm who requested and online application. It was when I was trying to upload attachments to send to them for ID Documents and also their application form that this problem started and has now continued. I don't know what to do sorry if any one can help me that would be great!!higherstill wrote:
I have done a Virus scan with ClamX and removed x3 Phising files
I replied to your other post before seeing that you used ClamXav for this. There is a ClamXav Forumfor questions or problems with using it and some specific warnings about removing phishing and any e-mail files.
also a Malware scan and removed something called 'Genieo' omnibar.safariextz These are now all in trash.
Viruses are a form of Malware, so ClamXav would have found that. Genieo is adware (annoying but generally not intended to be malicious). As I mentioned in the other thread, you need TheSafeMac's Adware Removal Toolfor that.
I had to upload new driver for my Fuji Printer yesterday.
I'm guessing you meant download. You should never download drivers from anywhere except the manufacturers site (Fuji in this case). Generic download sites are where a lot of adware and malware can be found (e.g. C|Net's download.com, Softonic and most any BitTorrent site).
And I see you are using Mavericks. Your other posting was to the Lion forum, so I assumed that's what OS X you were using. Shouldn't make much difference for your issue. -
Help with File Upload manually
Hi Experts,
I need code to upload a file without using the upload UI Element. we have our terms and conditions which has to be signed by the user and once the user signs and clicks the next button to go to the next page, I generate a pdf with the time stamp of when the user signed and upload it to ECC. here i can not use the File upload UI Element but have to upload it automatically to ECC.
Can any one help me out with this please.
ThanksHi,
I dont know why you need to to upload the file for this requirement. You can simply store the user id and the timestamp in portal database table or in a ECC z table.
In case you definitely need to upload the file then you can use KM API to uploadthe file to portal KM folder
http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/a099a3bd-17ef-2b10-e6ac-9c1ea42af0e9?quicklink=index&overridelayout=true
but you need not use the upload feature in the example, instead just get the data from wd context and upload to KM.
Srini
Maybe you are looking for
-
How do I reinstall os x moutain lion after deleting necessary files?
When trying to get my Canoscan 9550F to work with OS X 10.8.x, I was able to add it to the system settings under printer, but still it didn't work. I decided to make sure the Canon driver and Apple driver weren't fighting, so I deleted some files. No
-
Using Numbers, can I calculate the date that will be eg 45 days ahead of a given date?
Using Numbers, can I calculate the date that will be eg 45 days ahead of a given date?
-
What is the procedure for permanently adding an icon to the dock? Thanks, Ian
-
BW-SRM TRFC Error when loading PO data
Hello, We are implementing an extended classic scenario in SRM. Invoices are created on R/3. All data is loaded into BW. When loading the PO data into BW, we receive the error message: 'For purch. order 4320000040 backend source system is empty even
-
Hello, I'm using uiXML to deliver SVG images that I am storing as ORDSYS.OrdDOC in the database. I can create the appropriate tags in my document but the url that is pulled out doesn't work. It never returns the image. This seems more like a JDevelop