[英]Upload files directly to the FTP server by using “Jquery file upload plugin”
我在我的网站上使用“ Blueimp Jquery文件上传插件 ”,并且授予用户可以在服务器上上传文件的权限。 我将网站托管在HostGator上。 问题是用户不能上传的文件大小超过64MB /文件,并且在搜索后我发现HostGator已将“ php.ini”文件中上传文件的此限制设置为最大64MB /文件,并且我无法更改此大小限制。
但是实际上我可以直接通过FTP上传任何大小的文件而没有任何限制。
因此,我想问是否有一种解决方法,可以用来避免这个HostGator限制,或者是否有方法允许用户通过FTP直接将文件上传到服务器,所以会抛出此jquery插件“ Web应用程序”。
您肯定可以更改hostgator的最大文件大小设置,就像我之前做过的几次一样。
在您选择的目录中,创建一个.htaccess文件。 在此文件中包括php覆盖设置。
php_value upload_max_filesize 200M
php_value post_max_size 200M
除非最近几个月中发生了任何变化,否则此变通办法始终对我有用。
jupload可以通过ftp上传
http://jupload.sourceforge.net/
这是一个好的解决方案imo。 虽然并非所有用户都启用Java,但是您可以使html页面正常降级为http上传,在这种情况下,唯一丢失的用户是那些想要上传大文件的用户。
或切换虚拟主机-另一个简单有效的解决方案。
您可以使用FTP的“Blueimp jQuery的文件上传插件”,但它需要一些PHP代码。 不要UploadHandler
类(file-uploads / server / php / UploadHandler.php),而应该扩展它并根据需要覆盖函数。
将file-uploads / server / php / index.php的内容替换为以下内容:
require('UploadHandler.php');
/*
* custom class for uploading files, simply extends the UploadHander class
*/
class CustomUploadHandler extends UploadHandler {
/*
* rewreite the handle_file_upload() function to use FTP to send the files to the FTP server
*/
protected function handle_file_upload($uploaded_file, $name, $size, $type, $error, $index = null, $content_range = null) {
$file = new stdClass();
$file->name = $this->get_file_name($uploaded_file, $name, $size, $type, $error,
$index, $content_range);
$file->size = $this->fix_integer_overflow((int)$size);
$file->type = $type;
if ($this->validate($uploaded_file, $file, $error, $index)) {
$this->handle_form_data($file, $index);
$upload_dir = $this->get_upload_path();
if (!is_dir($upload_dir)) {
mkdir($upload_dir, $this->options['mkdir_mode'], true);
}
$file_path = $this->get_upload_path($file->name);
$append_file = $content_range && is_file($file_path) &&
$file->size > $this->get_file_size($file_path);
if ($uploaded_file && is_uploaded_file($uploaded_file)) {
// multipart/formdata uploads (POST method uploads)
if ($append_file) {
file_put_contents(
$file_path,
fopen($uploaded_file, 'r'),
FILE_APPEND
);
} else {
move_uploaded_file($uploaded_file, $file_path);
}
} else {
// Non-multipart uploads (PUT method support)
file_put_contents(
$file_path,
fopen('php://input', 'r'),
$append_file ? FILE_APPEND : 0
);
}
$file_size = $this->get_file_size($file_path, $append_file);
if ($file_size === $file->size) {
$file->url = $this->get_download_url($file->name);
if ($this->is_valid_image_file($file_path)) {
$this->handle_image_file($file_path, $file);
}
} else {
$file->size = $file_size;
if (!$content_range && $this->options['discard_aborted_uploads']) {
unlink($file_path);
$file->error = $this->get_error_message('abort');
}
}
$this->set_additional_file_properties($file);
}
/*
* now send it to the FTPserver
*/
$source_file = $file_path; // the path of the file to upload
$destination_file = '/your/path/' . $file->name; // the file path to upload to (must have trailing / in the path before the $file->name is appended)
$ftp_error = $this->ftp_upload($source_file, $destination_file);
if ($ftp_error != '') {
$file->error = $ftp_error;
}
return $file;
}
/*
* new function for uploading using FTP
*/
protected function ftp_upload($source_file, $destination_file) {
$ftp_server = 'YOUR FTP HOST NAME';
$ftp_user_name = 'YOUR USER NAME';
$ftp_user_pass = 'YOUR PASSWORD';
$port_number = YOUR FTP PORT NUMBER;
$error = '';
// set up basic connection
$conn_id = ftp_connect($ftp_server, $port_number);
if (!$conn_id) {
$error = "FTP connection has failed! Connection attempt was blocked." ;
return $error;
}
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// check connection
if (!$login_result) {
$error = "FTP connection has failed! ";
$error .= "Could not log into fpt://$ftp_server for user $ftp_user_name";
return $error;
}
// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY);
// check upload status
if (!$upload) {
$error = "FTP upload has failed!";
} else {
$error = "Uploaded $source_file to $ftp_server as $destination_file";
}
// close the FTP stream
ftp_close($conn_id);
return $error;
}
}
// options to pass to the upload handler object
$options = [
// ANY OPTIONS, SUCH AS FILE UPLOAD LOCATION
'upload_url' => 'fpt://YOUR-FTP-SERVER-NAME/files/',
];
// finally, instantiate the new class
$upload_handler = new CustomUploadHandler($options);
请注意,这仅是在将文件上传到上传服务器之后,才通过ftp将文件复制到ftp服务器。 这意味着您将拥有同一文件的两个副本。 您可以删除原始上传的文件而无需进行过多的工作,但是请确保ftp操作已首先完成。
您将需要此文件,并且需要Ohgodwhy描述的.htaccess apache设置
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.