Well, yeah, you're using local path basically. And you should NEVER use 
.split('/')[-1] to determine file basename, take a look at os.path module 
instead.

But that's not the point. You should try to use absolute path, I believe it 
would do the trick.

> On 4 Aug 2017, at 17:49, Ronaldo Bahia <[email protected]> wrote:
> 
> the method is called in a def post() within a class view:
> 
> user_cv = CandidateCV.objects.get(user=request.user)
> user_cv_file = str(user_cv.resume).split('/')[-1]
> s3upload(user_cv_file)
> 
> The file is converted from doc to pdf in server project folder, where 
> manage.py is.
> So probably there is no absolute path.
> 
> How can I solve it?
> 
> Thanks
> Ronaldo Bahia
> +55 11 3280 6971
> +55 11 963 622 581
> 
> Materiais gratuitos para o RH:
> - ROI - Melhorando Indicadores no RH 
> <http://blog.jobconvo.com/post/110644747055/o-impacto-das-entrevistas-virtuais-no-recrutamento?from=email>
> - Manual do Recrutador Moderno 
> <http://blog.jobconvo.com/post/108666785355/manual-do-recrutador-moderno?from=email>
> 2017-08-03 1:36 GMT-03:00 "Александр Христюхин (roboslone)" 
> <[email protected] <mailto:[email protected]>>:
> Hi,
> 
> Are you sure s3file contains absolute path? I can't see where s3upload is 
> being called.
> 
> Also, you might wanna use os.remove instead of calling subprocess.
> You also might wanna check out PEP-8 and Sphinx for your docstrings.
> 
>> On 2 Aug 2017, at 02:28, Ronaldo Bahia <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>> Hi everyone, can you help me?
>> Thanks in advance
>> 
>> Thread: 
>> https://stackoverflow.com/questions/45449102/django-python-oserror-no-such-file-or-directory-but-file-exists
>>  
>> <https://stackoverflow.com/questions/45449102/django-python-oserror-no-such-file-or-directory-but-file-exists>
>> 
>> Code:
>> 
>> 
>> 
>> down vote
>>  <>favorite
>>  
>> <https://stackoverflow.com/questions/45449102/django-python-oserror-no-such-file-or-directory-but-file-exists#>
>>      
>> I'm converting doc and docx files to pdf in the server using unoconv with 
>> LibreOffice. And I need to upload to S3 the converted file.
>> 
>> I can convert with success the files and I can see them in the server.
>> 
>> But when I try to upload the pdf, I get the error. What am I missing?
>> 
>> Thanks in advance
>> 
>> This works just fine:
>> 
>> import subprocess
>> from boto.s3.connection import S3Connection, Bucket, Key
>> 
>> def doc_to_pdf(user):
>>     '''
>>     Convert doc or docx to PDF.
>> 
>>     parameter user: is a request.user
>> 
>>     Usage:
>>         doc_to_pdf(self.request.user):
>>     '''
>> 
>>     user_cv = CandidateCV.objects.get(user=user)
>>     user_cv_file = str(user_cv.resume).split('/')[-1] # tem que ser PDF
>>     user_cv_filetype = user_cv_file.split('.')[-1]
>> 
>>     if not user_cv_filetype in settings.PDF_FILE_TYPE:
>>         # Se não for PDF
>>         file_in = user_cv.resume.url
>>         file_name = file_in.split('/')[-1]
>>         # download
>>         urllib.request.urlretrieve(file_in, file_name)
>>         file_out = user_cv_file.split('.')[0] + '.pdf'
>> 
>>         # converte para PDF
>>         env = os.environ.copy()
>>         env['HOME'] = '/tmp'
>>         subprocess.Popen(["unoconv","-f", "pdf", "%s" % (file_in)], env = 
>> env)
>> 
>>         # Define a path para salvar o documento na S3
>>         resume_path = 'resumes/%s/' % str(date.today())
>> 
>>         # key é o nome do arquivo na S3
>>         key = '%s%s' % (resume_path, file_out)
>> 
>>         # deleta o arquivo localmente
>>         subprocess.call("rm -f %s" % user_cv_file, shell=True)
>> 
>>         # Salva o novo formato no banco
>>         user_cv.resume = key
>>         user_cv.save()
>> This is the code in which I get the error in line: 
>> k_out.set_contents_from_filename(s3file)
>> 
>> def s3upload(s3file):
>> 
>>     # Conecta na AWS S3
>>     conn = S3Connection(settings.AWS_ACCESS_KEY_ID, 
>> settings.AWS_SECRET_ACCESS_KEY)
>>     bucket_out = Bucket(conn, settings.AWS_STORAGE_BUCKET_NAME)
>>     k_out = Key(bucket=bucket_out, name=s3file)
>> 
>>     # Define a path para salvar o documento na S3
>>     resume_path = 'resumes/%s/' % str(date.today())
>> 
>>     # key é o nome do arquivo na S3
>>     key = '%s%s' % (resume_path, s3file)
>>     k_out.key = key
>> 
>>     # Salva na AWS S3
>>     k_out.set_contents_from_filename(s3file)
>>     k_out.make_public()
>> 
>>     # deleta o arquivo localmente
>>     subprocess.call("rm -f %s" % s3file, shell=True)
>> 
>> 
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "Django users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to [email protected] 
>> <mailto:[email protected]>.
>> To post to this group, send email to [email protected] 
>> <mailto:[email protected]>.
>> Visit this group at https://groups.google.com/group/django-users 
>> <https://groups.google.com/group/django-users>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/django-users/7cecdcdb-7fcf-4f4a-858a-30801fa9cf9b%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/django-users/7cecdcdb-7fcf-4f4a-858a-30801fa9cf9b%40googlegroups.com?utm_medium=email&utm_source=footer>.
>> For more options, visit https://groups.google.com/d/optout 
>> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "Django users" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/django-users/IDKZeRHtxyM/unsubscribe 
> <https://groups.google.com/d/topic/django-users/IDKZeRHtxyM/unsubscribe>.
> To unsubscribe from this group and all its topics, send an email to 
> [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at https://groups.google.com/group/django-users 
> <https://groups.google.com/group/django-users>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/django-users/6BC03BEF-B4AD-49AB-8A2A-6EDDAD0DB13F%40gmail.com
>  
> <https://groups.google.com/d/msgid/django-users/6BC03BEF-B4AD-49AB-8A2A-6EDDAD0DB13F%40gmail.com?utm_medium=email&utm_source=footer>.
> 
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] 
> <mailto:[email protected]>.
> To post to this group, send email to [email protected] 
> <mailto:[email protected]>.
> Visit this group at https://groups.google.com/group/django-users 
> <https://groups.google.com/group/django-users>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/django-users/CAGz5-6gvNNWthLEFfyFicV_7voe75oWKypXP6LxsuzKLeTWzDg%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/django-users/CAGz5-6gvNNWthLEFfyFicV_7voe75oWKypXP6LxsuzKLeTWzDg%40mail.gmail.com?utm_medium=email&utm_source=footer>.
> For more options, visit https://groups.google.com/d/optout 
> <https://groups.google.com/d/optout>.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/3DE439B9-5926-42DC-9862-85FF20DD66BE%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to