Hi Dave and Everyone, I followed your advice -- Thanks for the code cleanup - However the issues still exist
*ISSUE*#1 - The photo is still being saved in [E:\web2py_src\web2py\applications\*artpicstatic*\user_uploads] Correct path where it should be saved is [infile: E:\web2py_src\web2py\applications\artpic\static\user_uploads\] I simply do not understand why the application is saving the file in above path and not in the correct path in green. We have removed the problem causing code [foto_path = (request.folder + "static/user_uploads/" + upload_pic) ] from this method so where is it pulling it from and saving the files to this location only. Where is this magic happening from? Is it web2py *ISSUE*#2 - As the application cannot find the file in the correct path mentioned above it fails to create a thumbnail for it UPDATED CODE listing form = SOLIDFORM(db.fotoz , fields=fields, submit_button='Upload Foto') #if form.accepts(request.vars, session): if form.process().accepted: upload_pic = form.vars.upload_photo recordsID= form.vars.id #Thumbnail code print ("----------------") infile = os.path.join(request.folder, "static", "user_uploads", upload_pic) print "infile: " , infile thumbnail_filename = "%s.thumbnail.jpg" % recordsID print "thumbnail_filename: ", thumbnail_filename thumbpath = outfile = os.path.join(request.folder, "static", "thumbs" , thumbnail_filename) print "thumbpath and outfile: ", outfile #Insert thumbnail and thumbnail path in db imgthumb field. db(db.fotoz.id==recordsID).update(imgthumb=thumbnail_filename, imgthumbpath=thumbpath) ##outfile if infile != outfile: try: im = Image.open(infile) im.thumbnail(size) #Check for image format image_format = (im.format) #print ("Image format: ", image_format) ### ================ Watermark stuff ====================== ## Watermark Text -- width, height = im.size draw = ImageDraw.Draw(im) watermark_text = "WATER" watermark_font = ImageFont.truetype('arial.ttf', 20) textwidth, textheight = draw.textsize(watermark_text, watermark_font) # calculate the x,y coordinates of the text margin = 5 x = width - textwidth - margin y = height - textheight - margin # draw watermark in the bottom right corner ## Specify this to fill font with red color , fill=(128,0,0,128)) OR #, fill=shadowcolor) OR fill="red" or fill="#ff0000" -- work draw.text((x, y), watermark_text, font=watermark_font, opacity=0.25) ## --- Watermark text ends --- #Process various image formats for making thumbnails. Currently supporting JPG/JPEG, GIF and PNG if (image_format == "JPEG"): im.save(outfile, "JPEG") if (image_format == "JPG"): im.save(outfile, "JPG") if (image_format == "GIF"): im.save(outfile, "GIF") if (image_format == "PNG"): im.save(outfile, "PNG") except IOError: print "Cannot create thumbnail (un-recognized format) for: " , infile #pass response.flash='Photo uploaded' *OUTPUT *- Path output for above code --* NOTE The infile must be saved in the path mentioned below but it does not exist there. * ---------------- infile: E:\web2py_src\web2py\applications\artpic\static\user_uploads\fotoz.upload_photo.bf976468faa81f30.3030372e4a5047.JPG thumbnail_filename: 99.thumbnail.jpg thumbpath and outfile: E:\web2py_src\web2py\applications\artpic\static\thumbs\99.thumbnail.jpg Cannot create thumbnail (un-recognized format) for: E:\web2py_src\web2py\applications\artpic\static\user_uploads\fotoz.upload_photo.bf976468faa81f30.3030372e4a5047.JPG Regards, Rahul On Friday, August 30, 2019 at 1:42:44 AM UTC+5:30, Dave S wrote: > > > > On Thursday, August 29, 2019 at 12:21:41 PM UTC-7, Rahul wrote: >> >> Hi Val and Dave, >> >> Have a look at the code below - the line foto_path=... below works but it >> uploads the photos to "web2py\applications\artpicstatic\user_uploads" >> folder instead of web2py\applications\artpic\static\user_uploads folder. It >> also generates the thumbnail file. Now if I use *foto_path = >> os.path.join(request.folder + "static/user_uploads/" + upload_pic)* it >> shows the right path after normalization but does not upload the photo at >> all. And since it does not upload the photo the rest of the code fails to >> generate thumbnails etc and throws this error . m using windows 10 with >> python 2.7.13 >> >> - <type 'exceptions.IOError'> [Errno 2] No such file or directory: >> 'E:\\web2py_src\\web2py\\applications\\artpic\\static\\user_uploads\\fotoz.upload_photo.82bfeee5a1affabd.3033372e4a5047.JPG' >> >> CODE: >> ------- >> #foto_path = (request.folder + "static/user_uploads/" + >> upload_pic) >> print ("----------------") >> foto_path = (request.folder + "static/user_uploads/" + upload_pic) >> > > Bzzt. Concantenating different parts of the path is tetchy. I'd use > os.path.join() ALWAYS, and let it provide the separators. You missed one, > it seems. > > /dps > > > print "Foto Path: ", foto_path >> >> normal_foto_path = os.path.normpath(foto_path) >> print "Normal Foto Path: ", normal_foto_path >> >> infile = normal_foto_path >> print "infile: " , infile >> >> thumbnail_filename = ("%s" % recordsID + ".thumbnail.jpg") >> print "thumbnail_filename :", thumbnail_filename >> >> outfile_path = os.path.join(request.folder, "static/thumbs/" + >> thumbnail_filename) >> print "outfile_path: ", outfile_path >> >> normal_outfile_path = os.path.normpath(outfile_path) >> print "normal_outfile_path ", normal_outfile_path >> >> outfile = normal_outfile_path >> print "outfile: ", outfile >> ----------- >> OUTPUT ITERATIONS: >> >> [1] >> >> Foto Path: >> E:\web2py_src\web2py\applications\artpicstatic/user_uploads/fotoz.upload_photo.8c9837615e4fa932.3035382e4a5047.JPG >> Normal Foto Path: >> E:\web2py_src\web2py\applications\artpicstatic\user_uploads\fotoz.upload_photo.8c9837615e4fa932.3035382e4a5047.JPG >> infile: >> E:\web2py_src\web2py\applications\artpicstatic\user_uploads\fotoz.upload_photo.8c9837615e4fa932.3035382e4a5047.JPG >> thumbnail_filename : 64.thumbnail.jpg >> outfile: >> E:\web2py_src\web2py\applications\artpic\static\thumbs\64.thumbnail.jpg >> ---------------- >> [2] >> >> Foto Path: >> E:\web2py_src\web2py\applications\artpicstatic/user_uploads/fotoz.upload_photo.838dbfb13f66470d.3030312e4a5047.JPG >> Normal Foto Path: >> E:\web2py_src\web2py\applications\artpicstatic\user_uploads\fotoz.upload_photo.838dbfb13f66470d.3030312e4a5047.JPG >> infile: >> E:\web2py_src\web2py\applications\artpicstatic\user_uploads\fotoz.upload_photo.838dbfb13f66470d.3030312e4a5047.JPG >> thumbnail_filename : 65.thumbnail.jpg >> outfile_path: >> E:\web2py_src\web2py\applications\artpic\static/thumbs/65.thumbnail.jpg >> normal_outfile_path >> E:\web2py_src\web2py\applications\artpic\static\thumbs\65.thumbnail.jpg >> outfile: >> E:\web2py_src\web2py\applications\artpic\static\thumbs\65.thumbnail.jpg >> >> ------------ >> [3] >> >> infile: >> E:\web2py_src\web2py\applications\artpicstatic\user_uploads\fotoz.upload_photo.862f9808c7622ca7.3033372e4a5047.JPG >> thumbnail_filename: 79.thumbnail.jpg >> outfile: >> E:\web2py_src\web2py\applications\artpic\static\thumbs\79.thumbnail.jpg >> thumbpath: >> E:\web2py_src\web2py\applications\artpic\static\thumbs\79.thumbnail.jpg >> Cannot create thumbnail (un-recognized format) for: >> E:\web2py_src\web2py\applications\artpicstatic\user_uploads\fotoz.upload_photo.862f9808c7622ca7.3033372e4a5047.JPG >> >> >> SCREENSHOT >> >> >> >> >> CODELISTING IS ATTACHED >> >> Looks like a simple answer but feels like my code is badly written... >> >> Regards, >> >> Rahul >> >> >> >> >> >> >> >> >> >> On Thursday, August 29, 2019 at 2:17:49 AM UTC+5:30, Val K wrote: >>> >>> It is no need to use different code for win/linux, since it is Python! >>> There is os.path.normpath(your_path) that does all stuff with slashes, I >>> have app that works on both platforms just fine (without platform checking >>> at all) >>> My way - always use '/' in path, and at the end of all manipulations >>> performs normalisation: path = os.path.normpath(path) >>> And keep in mind that os.path.join() also works with filenames, so you >>> can just os.path.join('foo', 'bar', 'baz.thumbnail.jpg') >>> >>> >>> >>> On Wednesday, August 28, 2019 at 9:05:11 PM UTC+3, Rahul wrote: >>>> >>>> Hi Dave, >>>> >>>> upload_pic is the form variable that user specifies for uploading the >>>> file from local disk. Basically it is the filename. I removed the braces >>>> for >>>> outfile = (thumbpath) >>>> but this is still not working. Any more suggestions ? >>>> >>>> >>>> Regards >>>> Rahul >>>> >>>> On Tuesday, August 27, 2019 at 2:21:45 PM UTC+5:30, Rahul wrote: >>>>> >>>>> Hey Dave, >>>>> I was facing issues with path storage in a db field so I >>>>> started using this method. I dont need outfiles curly braces will revisit >>>>> the code today if possible and get back with the details. This is my >>>>> modified code, previous one was straight forward and streamlined code and >>>>> was using simple code.Thanks for the questions I’ll try getting in >>>>> details. >>>>> >>>>> Regards, >>>>> >>>>> Rahul >>>> >>>> -- Resources: - http://web2py.com - http://web2py.com/book (Documentation) - http://github.com/web2py/web2py (Source code) - https://code.google.com/p/web2py/issues/list (Report Issues) --- You received this message because you are subscribed to the Google Groups "web2py-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to web2py+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/web2py/660234c3-f179-4683-9297-c91c041109d7%40googlegroups.com.