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.