第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Laravel/Guzzle - POST 二進(jìn)制文件內(nèi)容

Laravel/Guzzle - POST 二進(jìn)制文件內(nèi)容

PHP
森林海 2023-10-15 16:26:31
我正在嘗試向第 3 方 API 發(fā)出簡單的 POST 請求。API 接受文件作為 BODY 參數(shù)。具體來說,文件內(nèi)容必須是二進(jìn)制的:我已使用 Postman 成功發(fā)布到此第 3 方 API,主體配置如下:上傳文件時,我使用的是 Laravel。這是代碼://$document is a class of "UploadedFile"$tempfile = Storage::disk('local')->putFile('/temp', $document);然后我只是嘗試使用 Guzzle 發(fā)布此文件:use Illuminate\Support\Facades\Http;$filepath = storage_path('app/' . $tempfile);$post = Http::attach('file', file_get_contents($tempfile), 'myfile.pdf')->post('example.org')->json());但是,第 3 方 API 無法將其識別為 PDF 文件:內(nèi)容類型必須是 application/vnd.hypatos.ocr+json application/pdf image/tiff image/jpeg image/png text/xml application/xml 之一與我在郵遞員中發(fā)送的請求相比,我做錯了什么?這與我嘗試發(fā)布到 API 的文件完全相同。
查看完整描述

2 回答

?
明月笑刀無情

TA貢獻(xiàn)1828條經(jīng)驗 獲得超4個贊

Content-Type您是否嘗試像這樣在請求標(biāo)頭中指定您的


Http::attach('file', file_get_contents($tempfile), 'myfile.pdf')->withHeaders([

    'Content-Type' => 'application/pdf',

])->post('example.org')->json();


查看完整回答
反對 回復(fù) 2023-10-15
?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗 獲得超6個贊

嘗試直接從郵遞員復(fù)制代碼,看看您可能會丟失什么。


所以這是一個很好的問題,因為處理二進(jìn)制數(shù)據(jù)可能很棘手。我還沒有完全完成您想要做的事情,但是,我制作了一個 laravel 頁面,該頁面上傳一個電子表格進(jìn)程,該進(jìn)程會更改數(shù)據(jù),然后彈出修改后的電子表格的下載。使用二進(jìn)制文件是一件非常痛苦的事情,但這就是我學(xué)到的東西。首先是基本形式。


<input id="file" type="file" class="form-control" name="file" style="height:auto;" required />

然后ajax上傳


$.ajax({

            async: true,

            method: 'POST',

            enctype: 'multipart/form-data',

            processData: false,

            contentType: false,

            cache: false,

            url: "priceIncrease/parseHeaders",

            data: formData,

            xhr: function () {

                var myXhr = $.ajaxSettings.xhr();

                if (myXhr.upload) {

                    myXhr.upload.addEventListener('progress', progress, false);

                }

                return myXhr;

            }

        });

這里有額外的內(nèi)容是處理進(jìn)度條,但它與處理二進(jìn)制數(shù)據(jù)無關(guān),所以我將跳過它。


現(xiàn)在,我將文件解析為數(shù)組并對其進(jìn)行處理,并希望將電子表格返回給用戶,這就是二進(jìn)制 gigery pokery 的開始。當(dāng)我返回數(shù)據(jù)時,我必須將其編碼為 base64


$fqn = storage_path() . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . $priceIncreaseResult['filepath'] . $priceIncreaseResult['filename'];

$response = base64_encode(file_get_contents($fqn));

然后在前端我給它mime類型并從base64轉(zhuǎn)換回來


if(data['progress']['file']){

                var result = data['progress']['file'];

                var a = document.createElement("a");

                var file = document.getElementById("file");

                var filename = file.files[0].name;

                console.log(filename);

                var blob = new Blob([s2ab(atob(result))], {

                    type: 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,'

                });

                a.href = URL.createObjectURL(blob);

                a.download = filename;

                document.body.appendChild(a);

                a.click();

                a.remove();

            }

這里的最后一部分是類型轉(zhuǎn)換


        function s2ab(s) {

        var buf = new ArrayBuffer(s.length);

        var view = new Uint8Array(buf);

        for (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;

        return buf;

    }

我知道這不是一次性的答案,但我確實希望您能得到一些關(guān)于使用二進(jìn)制數(shù)據(jù)的激勵。


查看完整回答
反對 回復(fù) 2023-10-15
  • 2 回答
  • 0 關(guān)注
  • 288 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號