php上传文件到三方,php文件上传与下载

php文件上传

在通过form表单进行文件上传的,PHP需要用到预定义变量$_FILES

$_FILES['userfile']['name']    客户端机器文件的原名称。

$_FILES['userfile']['type']  文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。

$_FILES['userfile']['size']   已上传文件的大小,单位为字节。

$_FILES['userfile']['tmp_name']    文件被上传后在服务端储存的临时文件名。

$_FILES['userfile']['error']   和该文件上传相关的错误代码

html>

文件上传

对应处理的PHP代码

/**

* Created by PhpStorm.

* User: Administrator

* Date: 2016/4/2

* Time: 23:55

*/

header('content-type:text/html;charset=utf-8');

print_r($_FILES);

//1.通过$_FILES文件上传变量接收上传文件信息

$fileInfo=$_FILES['textfile'];

$filename=$fileInfo['name'];

$type=$fileInfo['type'];

$tmp_name=$fileInfo['tmp_name'];

$size=$fileInfo['size'];

$error=$fileInfo['error'];

if($error==UPLOAD_ERR_OK){

if(move_uploaded_file($tmp_name, "upload/".$filename)){

echo '文件'.$filename.'上传成功';

}else{

echo '文件'.$filename.'上传失败';

}

}else{

//匹配错误信息

switch($error){

case 1:

echo '上传文件超过了PHP配置文件中upload_max_filesize选项的值';

break;

case 2:

echo '超过了表单MAX_FILE_SIZE限制的大小';

break;

case 3:

echo '文件部分被上传';

break;

case 4:

echo '没有选择上传文件';

break;

case 6:

echo '没有找到临时目录';

break;

case 7:

case 8:

echo '系统错误';

break;

}

}

上传一个图片文件,并打印出数据:

/**

* Created by PhpStorm.

* User: mac

* Date: 16-1-2

* Time: 下午8:30

*/

header("Content-type:text/html;charset=utf-8");

// 配置文件需要上传到服务器的路径,需要允许所有用户有可写权限,否则无法上传成功

$uploadPath = 'uploads/';

// 获取提交的数据

$file = $_FILES['uploadFile'];

print_r($file);

if($file['error'] > 0)

{

echo '传入参数错误' . $file['error'] . "
";

}

else

{

echo"文件:".$file['name'].'
';

echo"大小:". ($file['size'] / 1024) . 'Kb
';

chmod($uploadPath, 0666);

if(file_exists($uploadPath.$file['name'])){

echo $file['name'] . "文件已经存在!";

}else{

move_uploaded_file($file['tmp_name'], $uploadPath.$file['name']);

echo '文件以保存在:'.$uploadPath.$file['name'];

}

}

###打印图片文件的数据

```

Array ( [textfile] => Array ( [name] => 小英.jpg [type] => image/jpeg [tmp_name] => D:\xampp\tmp\php46DB.tmp [error] => 0 [size] => 20433 ) )

```

Array

(

[name] => 634306d7jw1dvze5y1bk1j.jpg

[type] => image/jpeg

[tmp_name] => /Applications/XAMPP/xamppfiles/temp/phpsJFa8r

[error] => 0

[size] => 36028

)

文件:634306d7jw1dvze5y1bk1j.jpg

大小:35.18359375Kb

Warning: chmod(): Operation not permitted in /Applications/XAMPP/xamppfiles/htdocs/qzone_partner/upload_file.php on line 27

文件以保存在:uploads/634306d7jw1dvze5y1bk1j.jpg

##

上面的代码只能说我把客户端过来的文件,放在了PHP文件对应的文件夹下面,主要用的的函数就是move_uploaded_file (将上传的文件移动到新位置)

另外传输文件必须要用post方法进行提交,可以用is_uploaded_file ($_FILES['userfile']['tmp_name'])进行检测。

这些也只是简单的完成文件上传,一般在实际项目中还要针对不同的文件类型,文件大小进行判断。

文件的下载

对于文件的下载第一种方式就是通过a标签来完成,直接用href填写对应的连接地址

下载1.jpg

第二种方式:

通过程序来完成:

php得到文件的信息来进行下载处理:

$filename=$_GET['filename'];

header('content-disposition:attachment;filename='.basename($filename));

header('content-length:'.filesize($filename));

readfile($filename);

对于head函数:

Content-Disposition为属性名  attachment为以附件方式下载

Content-Length首部告诉浏览器报文中实体主体的大小

readfile函数输出一个文件来实现下载的功能

图片上传到远程图片服务器的方法

常见的有4种方法

虚拟主机等权限低的,一般在上传成功或者图片处理完成以后通过ftp协议等把文件推到其它服务器上

大型网站里,我们一般用下面几种方法

1,上传地址随机生成,指向到不同的服务器,以达到每个服务器上传压力和存储负载均衡

2,上传服务器上有事件监听事件,有新文件上传,可以使用rsync等协议将文件推到其它服务器

3,通过CDN等方式在有需要的时候,将文件同步到其它服务器

大概有两个思路

[1]图片服务器上跑程序,接收上传的图片数据{当然要考虑跨域,session共享这些必须的安全限制}

[2]本地服务器接收数据,然后用ftp模块或者curl传送到图片服务器上面

至于老的图片数据,可以保持不变,如果要迁移,可以设置服务器的sync同步数据或者直接ftp上传多一次,当然。迁移后要批量修改数据库存放的图片地址{一般域名会有变化}

相关上传图片文章:

### 实现Spring Boot中调用第三方接口进行文件上传 为了实现在Spring Boot应用程序中通过第三方API完成文件上传,可以遵循以下方法: #### 配置Maven依赖 首先,在`pom.xml`文件内引入必要的HTTP客户端库来处理文件传输请求。通常情况下,Apache HttpClient或OkHttp是比较流行的选择之一[^2]。 对于本案例而言,假设采用的是`org.apache.httpcomponents:httpclient`作为HTTP通信工具,则需添加如下配置到项目的POM文件中: ```xml <dependencies> <!-- Apache HttpComponents Client --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> </dependency> <!-- JSON解析器 (如果需要的话) --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> ... </dependencies> ``` #### 创建服务层逻辑 接着定义一个用于封装实际业务操作的服务类,比如命名为`FileUploadService.java`。在此处编写具体实现细节,包括但不限于设置目标URL、构建multipart/form-data类型的POST请求体以及发送网络请求等动作。 下面给出一段简单的Java代码片段展示如何利用HttpClient执行带有多部分表单数据的HTTPS POST请求来进行文件上传操作: ```java import org.apache.http.HttpEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import java.io.File; public class FileUploadService { private final String uploadUrl = "https://example.com/api/upload"; public boolean performFileUpload(File fileToBeUploaded){ try(CloseableHttpClient httpClient = HttpClients.createDefault()){ HttpPost postRequest = new HttpPost(uploadUrl); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.addBinaryBody( "file", // 参数名由服务器端指定 fileToBeUploaded, ContentType.APPLICATION_OCTET_STREAM, fileToBeUploaded.getName() ); HttpEntity multipartForm = builder.build(); postRequest.setEntity(multipartForm); try(CloseableHttpResponse response = httpClient.execute(postRequest)){ int statusCode = response.getStatusLine().getStatusCode(); return statusCode >= 200 && statusCode < 300; } } catch(Exception e){ throw new RuntimeException(e); } } } ``` 上述示例展示了怎样创建一个多部件实体对象并将其附加至HTTP POST请求之中;同时设置了正确的Content-Type头信息以便于接收方能够正确识别所传递的内容类型为二进制流形式的数据[^1]。 最后需要注意的一点是在真实环境中应当妥善管理异常情况的发生,并考虑加入适当的日志记录机制方便后续排查问题所在之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值