Upload em Perl

Discussão em 'Progress 4GL' iniciado por antenor, Dezembro 22, 2010.

  1. antenor

    antenor Membro Participativo

    boa tarde a todos,

    Fiz um rotina de upload usando o perl juntamente com o progress. Meu código em perl roda mas o arquivo enviado não vai para o local determinado no servidor. Postei abaixo, e se alguém souber o que pode ser eu agradeço:

    # SCRIPT DE UPLOAD DE ARQUIVOS - VERSAO WINDOWS

    #-----------------------------
    # Inicio das configuracoes
    #
    # $dir_upload = diretorio de upload de arquivos
    # $dir_paginas = diretorio de paginas de resposta (ex: sucesso.html e erro.html)
    #
    # Atencao: Colocar o caminho completo, lembrando sempre de substituir "\" por "\\"
    #
    #
    $dir_upload = "c:\\Inetpub\\wwwroot\\upload\\arquivos_sisconum";
    $dir_paginas = "c:\\Inetpub\\wwwroot\\upload";
    #
    # Fim das configuracoes
    #-----------------------------

    use CGI;
    $cgi = new CGI;

    #-----------------------------
    # Variaveis do Browser
    # OBS: $arqst = arquivo na estacao cliente
    # $arqsrv = arquivo no servidor
    #-----------------------------
    $arqst = $cgi->param("caminhonomearquivoupload");
    $pg_sucesso = $cgi->param("pg_sucesso");
    $pg_erro = $cgi->param("pg_erro");
    #-----------------------------


    #----------------------------------
    # Pagina padrao de erro/sucesso
    #----------------------------------
    sub mensagem {
    my ($pg_resposta,$status)=@_;

    # Exibe pagina em disco / mensagem padrao
    if ($pg_resposta) {
    open (MSG, "$dir_paginas\\$pg_resposta");
    @mensagem = <MSG>;
    close(MSG);
    foreach(@mensagem) {
    $mensagem.= $_;
    }
    } else {
    $mensagem = "<html><head><title>Upload de Arquivos</title></head>\n";
    $mensagem.= "<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n";
    $mensagem.= "<h2>Upload de Arquivos</h2>\n";
    if ($status eq "sucesso") {
    $mensagem.= "Sucesso ao fazer upload de arquivo.\n";
    } else {
    $mensagem.= "Erro ao fazer upload de arquivo.\n";
    }
    $mensagem.= "</body></html>\n";
    }

    print"Content-type: text/html\n\n";
    print"$mensagem";

    }

    # Checando arquivo
    if (!$arqst) {
    &mensagem($pg_erro,"erro");
    exit;
    }


    # Colocando arquivo em buffer para gravacao em disco
    $arq = "";
    while ($bytesread=read($arqst,$buffer,1024)) {
    $arq.=$buffer;
    }

    # Preparando o nome do arquivo no servidor
    # Para formato DOS e Unix
    $arqsrv = $arqst;
    $arqsrv =~ s/.*\\//i;
    $arqsrv =~ s/.*\///i;

    # Gravando o arquivo em disco
    open(FILE,">$dir_upload\\$arqsrv");
    print FILE $arq;
    close (FILE);

    # Exibindo mensagem de sucesso
    &mensagem($pg_sucesso,"sucesso");
  2. Agnaldo

    Agnaldo Membro Ativo

    Se estiver usando IIS,veja se o usuário da web (usuário do IIS) tem permissão de escrita no diretório em questão.
  3. antenor

    antenor Membro Participativo

    Obrigado, mas eu dei permissão e o programa roda mas não grava, seria alguma permissão diferente a do diretório virtual.

    Estou usando o IIS sim, mas não dá certo.

    Agradeço se vc tiver alguma nova sugestão.
  4. Agnaldo

    Agnaldo Membro Ativo

    Permissão que eu digo é para essas pastas,


    $dir_upload = "c:\\Inetpub\\wwwroot\\upload\\arquivos_sisconum";
    $dir_paginas = "c:\\Inetpub\\wwwroot\\upload";

    Permissão pro usuário do IIS
  5. kirchner

    kirchner Membro Participativo Moderador

    Agnaldo,

    Se você está usando o IIS, porque está quebrando a cabeça com Perl? Tem algum requisito? Na minha experiência, qualquer coisa ligada a Perl é mais trabalho do que realização...
  6. Agnaldo

    Agnaldo Membro Ativo

    Bom, acho que voce deve dizer isso para o Antenor então. Ele que esta tentando usar.
    Eu estou apenas tentando ajudar respondendo o que ele postou..

    E, apenas para cometário, não tenho nada contra Perl, muito pelo contrário.
    Uso-o de maneira eficiente em várias coisas.

Compartilhe esta Página