2015-07-05 15 views
0

這是我的HTML代碼。/cgi-bin/upload.pl第26行沒有這樣的文件或目錄。當嘗試使用AngularJS上傳文件時

<button class="button" ngf-select ng-model="files" ngf-multiple="multiple">Select File</button> 

Files: 
<ul> 
    <li ng-repeat="f in files" style="font:smaller">{{f.name}}</li> 
</ul> 
Upload Log: 
<pre>{{log}}</pre> 

這是控制器代碼。

$scope.$watch('files', function() { 
    $scope.upload($scope.files); 
}); 
$scope.log = ''; 

$scope.upload = function (files) { 
    if (files && files.length) { 
     for (var i = 0; i < files.length; i++) { 
      var file = files[i]; 
      Upload.upload({ 
       url: '/cgi-bin/upload.pl', 
       fields: { 
        'username': $scope.username 
       }, 
       file: file 
      }).progress(function (evt) { 
       var progressPercentage = parseInt(100.0 * evt.loaded/evt.total); 
       $scope.log = 'progress: ' + progressPercentage + '% ' + 
          evt.config.file.name + '\n' + $scope.log; 
      }).success(function (data, status, headers, config) { 
       $timeout(function() { 
        $scope.log = 'file: ' + config.file.name + ', Response: ' + JSON.stringify(data) + '\n' + $scope.log; 
       }); 
      }) 
      .error(function (data, status, headers, config) { 
       alert ('Error'); 
      }); 

     } 
    } 
}; 

這是Perl腳本。

#!c:/perl64/bin/perl.exe 

use strict; 
use warnings; 
use DBI; 
use CGI::Carp qw(warningsToBrowser fatalsToBrowser); 
use CGI; 
use CGI qw(:standard); 
use JSON; 
use CGI::Carp qw (fatalsToBrowser); 
use File::Basename; 

#send the obligatory Content-Type 
print "Content-Type: text/html\n\n"; 

$CGI::POST_MAX = 1024 * 5000; 
my $safe_filename_characters = "a-zA-Z0-9_.-"; 

my $cgi = new CGI(); 
my $upload_dir = "../images"; #location on our server 
my $filename = "dummy.png"; 

my $upload_filehandle = $cgi->upload("file"); 
print $upload_filehandle; 

open UPLOADFILE, ">../..$upload_dir$filename" or die $!; 
binmode UPLOADFILE; 

while (<$upload_filehandle>) 
{ 
    print UPLOADFILE; 
} 
close UPLOADFILE; 

當我試圖上傳本地Apache服務器上的文件,看到這個錯誤。

在C無這樣的文件或目錄:/程序文件(x86)/阿帕奇組/的Apache2/htdocs目錄/管理/ cgi-bin目錄/ upload.pl線26

這是perl腳本線26。

open UPLOADFILE, ">../..$upload_dir$filename" or die $!; 

我有一個名爲images的文件夾已經創建好了。那麼爲什麼這個錯誤?

任何人都可以幫助我什麼是錯的,什麼chages需要,我可以正確上傳文件。

回答

1

$upload_dir../images,和
$filenamedummy.png,所以
"../..$upload_dir$filename"../..../imagesdummy.png
需要我多說嗎?

這就是爲什麼在錯誤消息中包含路徑很好。

my $qfn = "../..$upload_dir$filename"; 
open(my $UPLOADFILE, '>', $qfn) 
    or die("Can't create \"$qfn\": $!\n"); 

(請注意,我做了其他方面的改進,其中包括來自全球水珠UPLOADFILE切換到詞彙標$UPLOADFILE的文件句柄。你必須調整下面的代碼,如果你採用這種強烈推薦的做法是使用該標)

+0

嗨ikegami。感謝您的迴應。在集成你的建議cahnegs現在我得到這個錯誤。無法創建../..../imagesdummy.png; –

+0

因爲它應該。你真的認爲路徑'../..../ imagesdummy.png'有意義嗎? – ikegami

+0

糟糕我的錯。我做了改變。 my $ qfn =「../$upload_dir/$filename」; my $ UPLOADFILE; open($ UPLOADFILE,'>',$ qfn) or die(「Can not create \」$ qfn \「:$!\ n」);現在響應是文件:als.png,響應:「als.png」,但沒有文件保存在目錄中。任何想法,現在有什麼不對? –

相關問題