導航:首頁 > 編程語言 > phpbase64圖片上傳

phpbase64圖片上傳

發布時間:2022-08-26 15:17:46

php後台怎麼將二進制存儲的圖片傳送給前端

一般是直接提供資源的鏈接,他們使用即可。

二進制數據可以通過base64處理後傳過去。

瀏覽器里可以通過<imgsrc="data:image/jpeg;base64,XXX">直接顯示圖片,
XXX表示圖片內容base64_encode後的結果

❷ PHP如何同時提交base64格式的圖片和文本數據給介面

推薦用Snoopy。
https://github.com/uniqid/Snoopy
僅供參考。

❸ php圖片上傳為什麼要base64上傳

可以讓別人看不到你的路徑,還要base64可以存入資料庫,

❹ php 圖片上傳有個小BUG,求大神解答。以下是我的一些代碼

您好,這個是 PHP 的一個 BUG(畢竟是外國人做的,中文支持不太好)。

PHP 中,上傳中文文件基本上都會出錯,所以只要在移動文件時,將文件重命名就可以了。

(如果需要原文件名,只需要將原文件名和重命名後的文件名保存在資料庫中就可以了)

代碼如下(您的代碼有一些漏洞與不規范之處,這里已更正):

//檢測文件MIME類型,如果不是圖片則阻止本次上傳
//不要相信$_FILES['file']['type'],這是可以偽造的

//如果PHP>=5.3.0,則使用finfo函數來獲取文件類型
//因為PHP>=5.3.0放棄了mime_content_type()函數
if(version_compare(PHP_VERSION,'5.3.0','>=')){
$f=finfo(FILEINFO_MIME_TYPE);
$ftype=explode('/',finfo_file($f,$_FILES['file']['tmp_name']));
finfo_close($f);
$f=NULL;
if($ftype[0]!=='image'){
@unlink($_FILES['file']['tmp_file']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}
$ftype=NULL;
}
else{
$ftype=explode('/',mime_content_type($_FILES['file']));
if($ftype[0]!=='image'){
@unlink($_FILES['file']['tmp_file']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}
$ftype=NULL;
}

$link=mysql_connect('localhost','root','123456');
mysql_query('setnames'UTF8'');
mysql_select_db('zhenyu',$link);

//為了防止SQL注入,對數據進行轉義
$pkind=addslashes($_POST['pkind']);
$pname=addslashes($_POST['pname']);
$pshow=addslashes($_POST['pshow']);

$filename_upload=$_FILES['file']['name'];

//Base64編碼後的字元只含有a-zA-Z0-9以及+,/,=
$filename=base64_encode($filename_upload);
//Base64編碼中有一些非文件名可用的字元,把它們替換掉
$filename=strtr($filename,array(
'+'=>'.',
'/'=>'_',
'='=>'-'
)
);
//上傳後的文件保存在proct文件夾
$file_move='proct/'.$filename;

//如果文件已存在,則在文件名後加上-和一個隨機數
//當然,這一部分也可以您自己更改,不會影響結果
if(file_exists($file_move)){
$rand='-'.strval(rand(0,9999));
$file_move.=$rand;
$filename_upload.=$rand;
//因為$rand被其它變數引用,不能直接注銷
//所以將其賦值為NULL,也可達到同樣的釋放內存的效果
$rand=NULL;
}

//判斷文件是否是通過HTTPPOST上傳的
//這可以用來確保惡意用戶無法欺騙程序去訪問本不該訪問的文件,例如/etc/passwd
if(!is_uploaded($_FILES['file']['tmp_name'])){
@unlink($_FILES['file']['tmp_name']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}
//如果文件移動失敗,則顯示錯誤信息
//這樣就不會導致資料庫存儲正常,但文件上傳失敗的情況了
elseif(!move_uploaded_file($_FILES['file']['tmp_name'],$file_move)){
@unlink($_FILES['file']['tmp_name']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}

//這里將重命名後的文件名與原文件名儲存在同一個欄位中,用豎線(|)隔開
//讀取時只需要用explode()分開就可以了
if($mysql=mysql_query("INSERTINTOproct(pkind,pname,ppicture,pshow)VALUES('{$pkind}','{$pname}','{$file_move}|{$_FILES['file']['name']}','{$pshow}')")){
//顯示文件上傳信息
echo'Upload:',$filename_upload,'<br/>';
echo'Size:',strval($_FILES['file']['size']/1024.0),'KB<br/>';
echo'Storedin:',$file_move,'<br/>';
echo'<ahref="pfabu.html">返回</a>';
echo'<script>alert("success");</script>';
}
//如果存入資料庫時失敗
//則顯示錯誤信息
else{
@unlink($_FILES['file']['tmp_name']);
die('文件上傳失敗!<br/>請重新上傳。<br/><ahref="pfabu.html">返回</a>');
}

這樣就可以了。

由於沒有測試,代碼難免會出現一些錯誤,請隨意指出,謝謝!


另外,您還應該考慮到不同用戶上傳同一個文件名的文件的情況,最好是為每個用戶單獨分配一個文件夾。

而且,當一個文件夾下的文件過多(>300)時,會導致讀寫速度變慢,這一點要注意。

解決:

當一個用戶的文件夾下文件有300個時,用戶再上傳文件,就將新的文件保存在另一個文件夾中(如:用戶名加上這個用戶已有的文件夾數量)。


如果還有後續問題,可以聯系我的郵箱:

[email protected]

謝謝!

❺ php表單上傳圖片到七牛雲存儲並返回地址……求具體流程~有代碼更好

有的,我最近研究了一下,寫了一篇記錄,如下

原文地址:http://cuiqingcai.com/?p=157

網上關於七牛雲存儲的教程除了官網上的API文檔,其他的資料太少了。研究了下API之後,現在已經能實現圖片的上傳和下載及上傳之後的重定向。

首先本篇文章實現的功能如下:

1.利用表單上傳功能,用戶可以點擊選擇文件按鈕,選擇本地的一個文件,同時設定上傳的圖片的名稱,點擊上傳按鈕可以上傳並存儲到七牛雲存儲。

2.在點擊上傳時會檢測文件的後綴名,限制為jpg和png格式存儲。

3.上傳成功後跳轉到自己設定的一個URL,並傳迴文件信息,如文件名。而不是顯示七牛白花花的json顯示頁面。

好啦,那我們開始吧,首先我們要有一個七牛雲存儲賬號,如果沒有的就自己去申請吧。

七牛雲存儲傳送門:http://www.qiniu.com/

一.SDK下載

https://github.com/qiniu/php-sdk/tags

戳這個網址下載一下SDK吧,裡面封裝了文件上傳下載等等的方法,我們引入之後可以直接調用。

SDK之中有一個qiniu的文件夾,這是所有的SDK實貨,這個是最重要的。我們首先要把這個文件夾及裡面的文件放到項目文件夾中,比如我放到這里。

大家可以看到有一個qiniu文件夾。好啦,資源支持就是這樣。接下來我們要實現代碼咯。

二.文件的上傳。

1.首先把你七牛雲存儲的密鑰照出來,點擊賬號設置可以看到有一個AccessKey和SecretKey,留著備用。

2.上傳憑證生成。

在這里我們首先要引入rs.php文件,自己找一對應路徑,代碼如下:

require_once(dirname(__FILE__)."/../../qiniu/rs.php");

dirname()是指的絕對路徑,有時相對路徑會出現問題,建議在前面加上dirname方法獲取絕對路徑。

require_once是引入文件,表示該文件只引入一次。

然後,傳入你的AccessKey和SecretKey

代碼如下:

$accessKey='';//換成你自己的密鑰
$secretKey='';//換成你自己的密鑰


Qiniu_SetKeys($accessKey, $secretKey);

然後建一個上傳策略對象,將你的bucket傳入,bucket 就是你的空間名。

$bucket = 'designpartners';
$putPolicy = new Qiniu_RS_PutPolicy($bucket);

然後調用此方法來生成上傳憑證。

$upToken = $putPolicy->Token(null);

接下來就寫一個html表單

<formmethod="post"action="http://up.qiniu.com"name="form"enctype="multipart/form-data">
<ul>
<inputtype="hidden"id="token"name="token"value=<?phpecho$upToken?>>
<li>
<labelfor="key">key:</label>
<inputname="key"value="">
</li>
<li>
<labelfor="bucket">照片:</label>
<inputname="file"type="file"/>
</li>
<li>
<inputtype="submit"value="提交">
</li>
</ul>
</form>

action就填寫up.qiniu.com,表單提供了一個輸入框key,用來輸入你想保存的圖片名稱,上傳到七牛之後就是這個名字。

然後一個文件選擇,一個提交按鈕。運行結果如下:

輸入key值和選擇照片即可實現照片的上傳。哈哈哈有沒有很簡單。

三、文件下載

原理和文件上傳功能相仿。

引入文件

require_once(dirname(__FILE__)."/../../qiniu/rs.php");

聲明你的七牛雲存儲域名和兩個密鑰以及向下載的文件名稱

$key='00000';
$domain='designpartners.qiniudn.com';
$accessKey='';
$secretKey='';

注意:1.key值即為文件名,不要加後綴

2.domain即為bucket加上qiniudn.com,例子中的designpartners就是我在上傳圖片時用的bucket名。

3.accessKey和secretKey換成你自己的,直接用我的不行的..因為我修改了.

Qiniu_SetKeys($accessKey,$secretKey);
$baseUrl=Qiniu_RS_MakeBaseUrl($domain,$key);
$getPolicy=newQiniu_RS_GetPolicy();
$privateUrl=$getPolicy->MakeRequest($baseUrl,null);
echo$privateUrl." ";

傳入這四個值即可生成一樣url,直接訪問url即可實現圖片的下載。

在引入圖片時直接

<img src = "<?php echo $privateUrl; ?>"/>

即可引入圖片咯,很簡單的吧。

四、303重定向

在上面的方法中,我們上傳圖片成功後跳轉到up.qiniu.com下,會顯示白白的網頁,顯示一個json字元串,但是在實際網站開發中我們肯定 不能讓用戶看到這種網頁,所以我們用到了303跳轉。SDK中也為我們封裝了這個方法。使用其實非常簡單。在上傳文件的代碼中添加兩行代碼即可

$putPolicy=newQiniu_RS_PutPolicy($bucket);
$putPolicy->ReturnUrl=site_url()."/upload/receiveInfo";
$putPolicy->ReturnBody='{"key":$(key)}';

注意:1.ReturnUrl和ReturnBody必須指定,並且首字母要大寫,很多人都小寫開頭,這樣會跳轉不成功。

2.ReturnUrl必須是一個公網可以訪問的網址,在本地測試是不可能通過的。比如你寫成localhost,七牛伺服器是定位不到的。
3.這個ReturnUrl的鏈接後會跟著一個?upload_ret=XXX,可以用get方法獲取這個upload_ret。upload_ret的內容是base64安全編碼的json形式的key值。

值的解析:比如我上傳的文件名是555

upload/receiveInfo?upload_ret=eyJrZXkiOiAiNTU1In0=

網址後綴如上所示,把那個upload_ret復制下來,用base64解碼可以出現如下結果:

{"key": "555"}

所以,我們要獲取555這個值的代碼如下,即解析代碼如下:

$upload_ret=$_GET['upload_ret'];
$json_ret=base64_decode($upload_ret);
$result=json_decode($json_ret);
echo"key".$result->key;

好啦,獲取到這個key值之後,你可以選擇存到資料庫或者進行其他的操作咯。

五、上傳前文件類型的驗證

我們可以用js來驗證文件的後綴名,

在form的屬性里加上

onsubmit="return isValidateFile('file');"

加上一個js方法

<script>
functionisValidateFile(obj){
varextend=document.form.file.value.substring(document.form.file.value.lastIndexOf(".")+1);
if(extend==""){
alert("請選擇頭像");
returnfalse;
}
else{
if(!(extend=="jpg"||extend=="png")){
alert("請上傳後綴名為jpg或png的文件!");
returnfalse;
}
}
returntrue;
}
</script>

即可驗證它的類型是否合法。

附:CI代碼實現:

獲取Uptoken:

functiongetUptoken(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
//遠程存儲空間名稱
$bucket='designpartners';
$accessKey='';
$secretKey='';
Qiniu_SetKeys($accessKey,$secretKey);
$putPolicy=newQiniu_RS_PutPolicy($bucket);
echosite_url();
$putPolicy->ReturnUrl=site_url()."/upload/receiveInfo";
$putPolicy->ReturnBody='{"key":$(key)}';
$upToken=$putPolicy->Token(null);
return$upToken;
}

文件上傳:

publicfunctionuploadPic(){
$upToken=$this->getUptoken();
$data['upToken']=$upToken;
$this->load->view('upload',$data);
}

303重定向解析:

publicfunctionreceiveInfo(){
$upload_ret=$_GET['upload_ret'];
$json_ret=base64_decode($upload_ret);
$result=json_decode($json_ret);
echo"key".$result->key;
}

文件下載:

publicfunctiondownloadPic(){
require_once(dirname(__FILE__)."/../../qiniu/rs.php");
$key='00000';
$domain='designpartners.qiniudn.com';
$accessKey='';
$secretKey='';
Qiniu_SetKeys($accessKey,$secretKey);
$baseUrl=Qiniu_RS_MakeBaseUrl($domain,$key);
$getPolicy=newQiniu_RS_GetPolicy();
$privateUrl=$getPolicy->MakeRequest($baseUrl,null);
echo"====>getPolicyresult: ";
echo$privateUrl." ";
}

表單:

<script>
functionisValidateFile(obj){
varextend=document.form.file.value.substring(document.form.file.value.lastIndexOf(".")+1);
if(extend==""){
alert("請選擇頭像");
returnfalse;
}
else{
if(!(extend=="jpg"||extend=="png")){
alert("請上傳後綴名為jpg或png的文件!");
returnfalse;
}
}
returntrue;
}
</script>
<formmethod="post"action="http://up.qiniu.com"name="form"enctype="multipart/form-data"onsubmit="returnisValidateFile('file');">
<ul>
<inputtype="hidden"id="token"name="token"value=<?phpecho$upToken?>>
<li>
<labelfor="key">key:</label>
<inputname="key"value="">
</li>
<li>
<labelfor="bucket">照片:</label>
<inputname="file"type="file"/>
</li>
<li>
<inputtype="submit"value="提交">
</li>
</ul>
</form>

❻ php上傳圖片代碼

等下,只是上傳?那麼簡單,不用寫到資料庫么?
給個反映啊,不然我怎麼幫你寫。.....

好啦號啦,我寫了:
<title>圖片上傳</title>
</head>

<body>
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
圖片上傳:
<label>
<input type="file" name="file" id="file" />
</label>
<label>
<input type="submit" name="button" id="button" value="上傳" />
</label>
</form>
<?php
if(isset($_POST['button']))//檢測按下了上傳按鈕
{
$file=$_FILES['file']['tmp_name'];//$_FILES是二維數組,file是文件;名,tmp_name是固定的,是上傳到系統的位置
$name=date("Ymdgid").'.jpg';//上傳以後,文件的新名字,用時間來做名字
$=($file,"photo/$name");//函數,是把文件拷貝到站點下的photo文件夾中
if($)//如果拷貝成功
echo '上傳成功';
else
echo '上傳失敗';
}
?>
</body>
</html>

❼ 正常php上傳圖片要轉成base64編碼么,為什麼要這么做

int WINAPI icePub_base64EncodeFile(char *strFromFilename,char *strBase64Filename);int WINAPI icePub_base64DecodeFile(char *strBase64Filename,char *strToFilename);網路icePubDll.dll下載

❽ php base64傳文件有什麼好處

1、介面傳輸
主要適用於通過WEB介面將文件從一個站點向另一個站點傳輸,可以用於XML信息。
2、存入資料庫
當然,將圖片等文件信息保存到資料庫中完全可以不用這么做,但這種方式依然適用。對於資料庫新手來說這種方式更可接受。因為這完全是一個字元串。
3、文件加密
文件加密可大家用得比較少,舉個例子,假如我們有一套PHP程序需要保護,必須有授權碼的用戶才能正常運行,那麼我們可能使用授權碼來對文件進行加密,即將上述編碼後的字元串再次加工。運行過程需要授權碼才可運行。

❾ php圖片保存到資料庫

1.圖片轉換 將上傳的圖片讀取到一個字元串中,再用base64對數據進行編碼 $img =base64_encode(file_get_contents($_FILES['file_head']['tmp...
2.顯示圖片 <imgsrc="{$base64String}"> 這樣就能把圖片顯示出來了

閱讀全文

與phpbase64圖片上傳相關的資料

熱點內容
阿里雲伺服器終端在哪裡 瀏覽:144
app紙有什麼用 瀏覽:219
cuteftp命令 瀏覽:502
最開始的編程語言是什麼 瀏覽:757
at遠程命令 瀏覽:490
雲伺服器哪家好點 瀏覽:211
android系統源碼閱讀 瀏覽:924
dumpjava分析工具 瀏覽:678
怎麼下載cpu源碼 瀏覽:154
代碼加密怎麼取消 瀏覽:888
編譯原理代碼在哪裡運行 瀏覽:584
解密攝影pdf 瀏覽:72
演算法編程中級題目 瀏覽:250
c語言編譯器畢業設計 瀏覽:717
醫保卡申請app哪個好 瀏覽:945
阿里雲伺服器上傳源碼 瀏覽:602
營銷管理科特勒pdf 瀏覽:696
願望清單app哪個好 瀏覽:461
安卓外放聲音怎麼解決 瀏覽:195
脈脈app干什麼用的 瀏覽:361