Hi.
In my vfp desktop application, I uploaded a file with wwHttp.
In wwProcess on application server, get the file stream and save to file.
In file based, Everything's good.
In com server mode, the file is created but, I can't open it.
Do you know why?
No - should work exactly the same unless there's a permissions problem and somehow the file isn't closed. Make sure when you write it out however you do it you close the file.
+++ Rick ---
I don't know why it is happening.
AS I told you, it only happens in com server mode.
SET DEFAULT TO c:\temp
LOCAL lcFileName
lcFileName = GETFILE()
DO wwHttp
oHttp = CREATEOBJECT("wwHTTP")
*** Set mode to multi-part form
oHttp.nHttpPostMode = 2
*** Post a file and a regular form variable
oHttp.AddPostKey("File", lcFileName, .T.)
oHttp.AddPostKey("cFileMemo","test")
lcHTML = oHTTP.HTTPGet("http://localhost/wwDemo/FileUpload.wwDemo")
*** Display result from server
ShowHTML(lcHTML) && Image is there but not rendering because of relative path
*********************************************************************
FUNCTION FileUpload
*********************************************************************
LOCAL lcFileName, lcFileBuffer, lcFileMemo
lcFileName = ""
lcFileBuffer = REQUEST.GetMultiPartFile("File", @lcFileName)
lcFileMemo = REQUEST.GetMultiPartFormVar("cFileMemo")
lcFileName = "C:\temp\" + JUSTSTEM(lcFileName) + "_rerult." + JUSTEXT(lcFileName)
IF LEN(lcFileBuffer) = 0
THIS.StandardPage("Upload Error","An error occurred during the upload or the file was too big.")
RETURN
ENDIF
IF LEN(lcFileBuffer) > 500000
THIS.StandardPage("File upload refused",;
"Files over 500k are not allowed for this sample...<BR>"+;
"File: " + lcFilename)
RETURN
ENDIF
*** Now dump the file to disk
File2Var(lcFileName, lcFileBuffer)
THIS.StandardPage("Thank you for your file upload",;
"<b>File Uploaded:</b> " + lcFileName + ;
" (" + TRANSFORM(FileSize(lcFileName),"9,999,999") + " bytes)<p>")
ENDFUNC
* FileUpload
I don't know why it wouldn't work - there's no difference in how those files are processed between file and COM modes, so it's gotta be something else than the processing.
I would check and see what the size of content is and maybe compare the HTTP output that is sent. Are you sure you're sending the same data when you're comparing? Use Fiddler to compare the size and content of the data being sent in each case.
Do make sure you're not writing the same file you are sending 😃
+++ Rick ---
Thanks for the quick reply.
I think that it's a matter of encoding.
My application has been working about 12 years without any problem in file based message.
As time goes by, people who use my application increased and an unknown error started to occur.
Some days ago, I decided to change from file based message to com message.
In com message, everything is going well except handling files (jpg, png, pdf, zip etc.).
I have to solve the problem.
Here is an alternative I think and it works in file based message and com message.
But, I don't know there is any problem I didn't consider.
How about you?
SET DEFAULT TO c:\temp
LOCAL lcFileName
lcFileName = GETFILE()
*DO FileUpload WITH lcFileName
DO FileUpload_Test WITH lcFileName
FUNCTION FileUpload
LPARAMETERS tcFileName
DO wwHttp
oHttp = CREATEOBJECT("wwHTTP")
*** Set mode to multi-part form
oHttp.nHttpPostMode = 2
*** Post a file and a regular form variable
oHttp.AddPostKey("File", tcFileName, .T.)
oHttp.AddPostKey("cFileMemo","test")
lcHTML = oHTTP.HTTPGet("http://localhost/wwDemo/FileUpload.wwDemo")
*** Display result from server
ShowHTML(lcHTML) && Image is there but not rendering because of relative path
ENDFUNC
FUNCTION FileUpload_Test
LPARAMETERS tcFileName
LOCAL lcFileBuffer
lcFileBuffer = FILETOSTR(tcFileName)
lcFileBuffer = STRCONV(lcFileBuffer, 13) && Converts single-byte characters in cExpression to encoded base64 binary
DO wwHttp
oHttp = CREATEOBJECT("wwHTTP")
*** Post a file and a regular form variable
oHttp.AddPostKey("cFileName", JUSTFNAME(tcFileName))
oHttp.AddPostKey("cFileBuffer", lcFileBuffer)
lcHTML = oHTTP.HTTPGet("http://localhost/wwDemo/FileUpload_Test.wwDemo")
*** Display result from server
ShowHTML(lcHTML) && Image is there but not rendering because of relative path
ENDFUNC
*********************************************************************
FUNCTION FileUpload
*********************************************************************
LOCAL lcFileName, lcFileBuffer, lcFileMemo
lcFileName = ""
lcFileBuffer = REQUEST.GetMultiPartFile("File", @lcFileName)
lcFileMemo = REQUEST.GetMultiPartFormVar("cFileMemo")
lcFileName = "C:\temp\" + JUSTSTEM(lcFileName) + "_rerult." + JUSTEXT(lcFileName)
*lcFileName = "C:\temp\update\" + lcFileName
IF LEN(lcFileBuffer) = 0
THIS.StandardPage("Upload Error","An error occurred during the upload or the file was too big.")
RETURN
ENDIF
IF LEN(lcFileBuffer) > 500000
THIS.StandardPage("File upload refused",;
"Files over 500k are not allowed for this sample...<BR>"+;
"File: " + lcFilename)
RETURN
ENDIF
*** Now dump the file to disk
File2Var(lcFileName, lcFileBuffer)
THIS.StandardPage("Thank you for your file upload",;
"<b>File Uploaded:</b> " + lcFileName + ;
" (" + TRANSFORM(FileSize(lcFileName),"9,999,999") + " bytes)<p>")
ENDFUNC
* FileUpload
*********************************************************************
FUNCTION FileUpload_Test
*********************************************************************
LOCAL lcFileName, lcFileBuffer
lcFileName = REQUEST.Form("cFileName")
lcFileBuffer = REQUEST.Form("cFileBuffer")
lcFileBuffer = STRCONV(lcFileBuffer, 14) && Converts base64 encoded data in cExpression to original unencoded data.
lcFileName = "C:\temp\" + JUSTSTEM(lcFileName) + "_result." + JUSTEXT(lcFileName)
IF LEN(lcFileBuffer) = 0
THIS.StandardPage("Upload Error","An error occurred during the upload or the file was too big.")
RETURN
ENDIF
IF LEN(lcFileBuffer) > 500000
THIS.StandardPage("File upload refused",;
"Files over 500k are not allowed for this sample...<BR>"+;
"File: " + lcFilename)
RETURN
ENDIF
*** Now dump the file to disk
File2Var(lcFileName, lcFileBuffer)
THIS.StandardPage("Thank you for your file upload",;
"<b>File Uploaded:</b> " + lcFileName + ;
" (" + TRANSFORM(FileSize(lcFileName),"9,999,999") + " bytes)<p>")
ENDFUNC
* FileUpload_Test
I don't know, i have no idea.
I'm using file uploads in COM mode without any problems, here on the message board, in the samples and a few other places so I know it works. Whatever is happening must be specific to the environment. I would capture the output and compare trying to figure out what the differences are between the data that comes in the different modes.
+++ Rick ---