get Pdf from oss when 302 从第三方接口获取文件流生成PDF并存储到本地

该代码示例展示了如何使用Java的HttpURLConnection处理HTTP 302重定向来下载PDF文件。程序首先发送GET请求,当遇到重定向时,获取新的Location并重新发送请求,同时处理Cookies,最终将PDF内容写入指定的文件路径。
 package http;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.function.Function;

class PdfUtil {
    public void getPdffrom302(String url, String filePath, Function<String, String> changeUtil){
        try {
            System.out.println("访问地址:" + url);
//发送get请求
            URL serverUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) serverUrl.openConnection();
            conn.setRequestMethod("GET");
//必须设置false,否则会自动redirect到重定向后的地址
            conn.setInstanceFollowRedirects(false);
            conn.addRequestProperty("Accept-Charset", "UTF-8;");
            conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8");
            // conn.addRequestProperty("Referer", "http://matols.com/");
            conn.connect();
//判定是否会进行302重定向
            if (conn.getResponseCode() == 302) {

//如果会重定向,保存302重定向地址,以及Cookies,然后重新发送请求(模拟请求)
                String location = conn.getHeaderField("Location");
                location = changeUtil.apply(location);
                String cookies = conn.getHeaderField("Set-Cookie");
                serverUrl = new URL(location);
                conn = (HttpURLConnection) serverUrl.openConnection();
                conn.setRequestMethod("GET");
                conn.setRequestProperty("Cookie", cookies);
                conn.addRequestProperty("Accept-Charset", "UTF-8;");
                conn.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8");
                //    conn.addRequestProperty("Referer", "http://matols.com/");
                conn.connect();
                System.out.println("跳转地址:" + location);
            }
//将返回的输入流转换成字符串
            InputStream is = conn.getInputStream();
            File f = new File(filePath);
            OutputStream os = new FileOutputStream(f);
            byte[] buffer = new byte[1024];
            int len;
            while ((len = is.read(buffer)) != -1) {
                os.write(buffer, 0, len);
            }
            os.flush();
            is.close();
            os.close();
// 释放资源
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        PdfUtil p= new PdfUtil();
        String url="http://www ";

        p.getPdffrom302(url,"1.pdf", new Function<String, String>() {
            public String apply(String location) {
                return location.replace("files.xxxx.com", "128.0.0.1");
            }
        });
    }


}

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>
在PHP中,要将OSS(Object Storage Service)上存储的视频文件生成封面保存到本地,可以借助阿里云提供的SDK(如OSS SDK for PHP)以及一些图像处理库(如 Intervention Image 或 Imagine),以下是一个简化的步骤说明: 1. **安装必要的库**: - 首先,你需要安装`aliyun/oss-sdk-php`用于处理OSS操作,根据需要安装图片处理库(如`intervention/image`)。 ```bash composer require aliyun/oss-sdk-php intervention/image ``` 2. **配置OSS SDK**: - 获取你的OSS访问密钥和安全令牌,设置OSS客户端。 ```php require 'vendor/autoload.php'; use Oss\OssClient; $accessKeyId = 'your_access_key_id'; $accessKeySecret = 'your_access_key_secret'; $bucketName = 'your_oss_bucket_name'; $endpoint = 'http://oss-cn-hangzhou.aliyuncs.com'; $client = new OssClient($accessKeyId, $accessKeySecret, '', $endpoint); ``` 3. **读取视频文件**: - 使用OSS API下载视频文件内容。 ```php $videoFile = 'path/to/video.mp4'; $object = $client->getObject($bucketName, $videoFile); $content = $object['Body']; ``` 4. **生成封面**: - 使用图片处理库读取视频内容,识别关键帧作为封面,这通常需要第三方库如FFmpeg来截取关键帧,然后使用干预库处理图片保存封面。 ```php use Intervention\Image\Facades\Image; // 假设$videoContent是一个包含视频二进制数据的变量 // 通过FFmpeg或其他工具截取关键帧,例如: // $coverImage = \FFMpeg\FFprobe::create() // ->streams('video') // ->first() // ->frames() // ->get(0); // 取第一帧 // 使用 Intervention Image 操作图片 $image = Image::make($coverImage); $coverPath = 'path/to/save/covers/' . basename($videoFile, '.mp4') . '-cover.jpg'; $image->save($coverPath); ``` 5. **清理资源**: - 记得关闭OSS连接和释放其他资源。 ```php $client->close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值