iT邦幫忙

0

如何使用javascript輸出資料夾內的圖片

  • 分享至 

  • xImage

請問各位大神,我設很多資料夾,希望user點選資料夾後,顯示該資料
夾內的所有圖片檔(可以判斷是為jpg更好...)
我看書後只知道可以使用document.write(""+圖片檔+);
也想過把整個資料夾的檔案先放入陣列再以for來輸出,但是不會讀取....
麻煩教一下,謝謝!!

淺水員 iT邦大師 6 級 ‧ 2023-01-28 17:22:44 檢舉
確認一下,你是想做類似雲端硬碟那種功能嗎?
只是可以預覽圖片?
晨勤 iT邦新手 4 級 ‧ 2023-01-28 22:11:22 檢舉
不是耶,單純希望使用者點選超連結後,可以顯示指定資料夾(已上傳的部份)的圖片,謝謝!!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
JamesDoge
iT邦高手 1 級 ‧ 2023-02-02 05:19:57
最佳解答

JavaScript是客戶端腳本語言,因此無法直接存取客戶端的檔案系統。
換一個後端語言瞬間就達成了
以下是php範例

<html>
<head>
  <title>使用PHP從文件夾讀取圖片</title>
</head>
<body>
  <h1>從文件夾讀取的圖片</h1>
  <?php
  //定義文件夾名稱為「images/」
  $folder = 'images/';
  //定義文件類型為「*.*」(所有類型的文件)
  $filetype = '*.*';
  //使用「glob」函數讀取文件夾中所有文件
  $files = glob($folder.$filetype);
  //計算讀取的文件數
  $count = count($files);
  
  //使用for循環遍歷文件
  for ($i = 0; $i < $count; $i++) {
    //讀取當前文件
    $image = $files[$i];
    //定義支持的文件類型(圖像格式)
    $supported_file = array(
        'gif',
        'jpg',
        'jpeg',
        'png'
    );
    
    //獲取當前文件的擴展名
    $ext = strtolower(pathinfo($image, PATHINFO_EXTENSION));
    //如果擴展名是圖像格式,則使用HTML <img>標籤顯示圖像
    if (in_array($ext, $supported_file)) {
        echo '<img src="'.$image .'" alt="隨機圖片" />'."<br /><br />";
    } else {
        //如果不是圖像格式,則跳過該文件
        continue;
    }
  }
  ?>
</body>
</html>
晨勤 iT邦新手 4 級 ‧ 2023-02-03 07:23:19 檢舉

我先試一下,不懂再求教,感謝您!!

2

首先,你要先了解到一件事。
基於「本機安全性原則」。JS前端語言,能對本機檔案的操作性,非常的有限。

所以像是目錄讀取的動作等等。基本來說除非是在本機域名下作業。
(如:http://localhost 或 http://127.0.0.1)
基本上是不可能能在非本機域名的情況下,對本機任何檔案做任何操作性的作業。
其也包含了讀取。

但你也可能會說,為何

document.write(""+圖片檔+);

這樣是可以跑的。
正常來說,你的圖片檔,一定是指定了本機路徑,也就是可能是「file://」這樣的讀取方式
這種方式,並不是操作性,而是呼叫性。
所以可以呈現出來。
但如果你想用程式來讀取它內容資料,基本上還需要突破許多難關。

正常來說,JS也不是沒有處理檔案的東西,你可以參考一下「FileReader」這個關鍵字。
只是如果你研究的話,你會發現其實這本身也有許多限制。
大多還是需要人為操作性才可以使用。

這一切都是來自「本機安全性原則」的原因。

因為,總不能一個外來的網站。就有權去控制你的本機檔案吧。這會死人的。

看更多先前的回應...收起先前的回應...
晨勤 iT邦新手 4 級 ‧ 2023-01-28 17:55:15 檢舉

謝謝指教,其實我只是想把我的照片上傳至網站的其中一個資料夾,然後把全部的圖片輸出在畫面上,然後分年度,使用者點了110,就會秀出110的資料夾照片,點了111,則會輸出111資料夾的照片,不是控制本機檔案,很多網站不是也秀出上傳的圖片檔嗎?

大師失算了,這傢伙問的資料夾是他自己用超連結取名的「資料夾」
我真的快被笑死哈哈哈哈哈哈

可不可以學一下發問阿拜託 每次都不清不楚 人家好心解答了

你才留言補充「其實我只是想把我的照片上傳至網站的其中一個資料夾.....」
幹?殺小,阿為什麼你發問的時候不打清楚?懶?
懶就花錢

其實我本質沒說錯。如果他是想利用JS做這件事的話。是一定辦不到的。
你的要求,得要靠一下後端語言才有可能辦到。

給你關鍵字「線上檔案管理」再自已去找配合的後端語言。
或是找找「ckeditor file manager」
這些都可以達到你的需求。不過因為你還要做過濾。所以可能後者對你不適合。你還是得要自行動手處理

太佛心了 這回答值好幾千呢

我又沒回答啥!!

0
chiayinin
iT邦新手 4 級 ‧ 2023-01-28 16:26:27

沒有使用過document.write(),查了 MDN 上寫說不建議使用。
https://ithelp.ithome.com.tw/upload/images/20230128/20129424MfTUtMhjQq.png

不清楚你的專案環境為何,是打 API 取得資料嗎?
若是的話,可以在 GET API 裡下判斷,只讀取 TYPE 為 JPG 來處理。

晨勤 iT邦新手 4 級 ‧ 2023-01-28 17:59:12 檢舉

謝謝指教,可是書上也這麼寫的呀! 上面的我有打出,但沒顯示出來...
重打一下,document.write(""<"td>"<"td>飲料"+(i+1)+"</td");

晨勤 iT邦新手 4 級 ‧ 2023-01-28 18:00:36 檢舉

上面的顯示還是有點不對,sorry,打的字有時會不見,有時不會不見,有點麻煩,相信你懂我的意思,謝謝!!

淺水員 iT邦大師 6 級 ‧ 2023-01-28 23:37:11 檢舉

richon2000 貼程式碼請參考:https://ithelp.ithome.com.tw/markdown#mk_fenced

0
淺水員
iT邦大師 6 級 ‧ 2023-01-28 23:34:46

希望user點選資料夾後,顯示該資料夾內的所有圖片檔

是要顯示「圖片連結」、「預覽圖」還是「圖片本身」?

我看書後只知道可以使用document.write(""+圖片檔+);

給個範例吧?

也想過把整個資料夾的檔案先放入陣列再以for來輸出,但是不會讀取....

瀏覽器只能處理網頁內容,並無法直接存取伺服器的檔案系統
for 迴圈可以用,但只能透過網址或伺服器開放的 API 來取得內容

看更多先前的回應...收起先前的回應...
晨勤 iT邦新手 4 級 ‧ 2023-01-29 11:25:10 檢舉

我要功能是讓使用者點選在網頁上的超連結,可以顯示出預設在伺服器端的資料夾圖片,每列2張圖片,供預覽和下載,我看書上的範例如下

<table border="1">
<script language="javascript">
  var d=new Array("卡布奇諾咖啡","拿鐵咖啡"....")
  for(var i=0 ; i<d.length ; i++)
  {
   document.write("<tr><td>飲料" + (i+1) + "</td>");
   document.write("<td>" + d[i]+ "</td></tr>");
  }
</script>
</table>

如果可以把指定的伺服器圖片先放入陣列,是比較方便指定顯示的順序,請大師開解,謝謝!!

aaron3399 iT邦好手 1 級 ‧ 2023-01-29 14:02:35 檢舉

你應該是想要網路相簿之類的功能吧!?
你乾脆直接把範例結果截圖出來,或是有網站範本?(例如無名小站之類)
大家也許能夠更快理解你想要的是甚麼,以及如何幫你實作.........
不然一直卡在書上寫的、documentwrite....也不是辦法啊

淺水員 iT邦大師 6 級 ‧ 2023-01-29 14:07:09 檢舉

假設你的檔案結構長這樣,而且伺服器沒有 url rewrite
https://ithelp.ithome.com.tw/upload/images/20230129/20112943S09f6JSYC2.png

則「101年圖片顯示.html」的內容可以依你說的這樣改

var d = ['卡布奇諾咖啡.png', '拿鐵咖啡.png'];
for (var i = 0; i < d.length; i++) {
    document.write("<tr><td>飲料" + (i + 1) + "</td>");
    document.write("<td><img src='" + d[i] + "'></td></tr>");
}

不過由於 document.write 已經不推薦使用了
可以改用其他的方式,例如下面這樣

<table id="image-table"></table>
<script>
    var images = ['卡布奇諾咖啡.png', '拿鐵咖啡.png'];
    document.getElementById('image-table').innerHTML = images.map((url, idx) => {
        return `<tr><td>飲料${idx + 1}</td><td><img src="${url}"></td></tr>`;
    }).join('');
</script>

不用再回答了 他都說這些回答是酸民
這種人就給他慢慢看他的書吧 問題問不清楚 浪費別人時間
人家好心解答 又要跳針書本沙小

晨勤 iT邦新手 4 級 ‧ 2023-01-29 21:52:03 檢舉

謝謝淺水員大師的回答,其實我以前的確是用tr,td輸出,但是每年的圖片檔名都不同,而且不少個,所以我希望直接抓如上面您的圖示一樣,直接將101或102全部的圖檔輸出,而不用特別註明卡布奇諾咖啡.png', '拿鐵咖啡.png這些檔名,我的能力有限,目前還解不出來 :<

淺水員 iT邦大師 6 級 ‧ 2023-01-29 22:54:47 檢舉

如果要程式自己抓伺服器的資料夾內部檔案名稱
那你需要的是後端語言,純前端無法滿足你的需求

1
Oo_花之舞__oO
iT邦新手 1 級 ‧ 2023-01-29 01:39:54

這年頭發問都這樣亂問的嗎...?


資料夾
你發問要搞清楚名詞的意義,不要自己亂掰:
資料夾:Windows 系統中用來存放同一類型文件或程式檔案的集合性物件稱之為資料夾;換言之有了資料夾可以對檔案進行分門別類、有系統的管理。

看了大概五次才知道你的資料夾不是資料夾,是網站上的超連結吧?
人家的資料夾叫做「電腦本地端的檔案」,不要亂用,人家大師都誤會了XD。


你五年前就問過了,

HTML中使用超連結來顯示圖片時,圖片要如何設定? 講的也是不清不楚,
但是很多人提供給你答案了。你卻說只要css, HTML 不要太高級?不寫JS才是最難的...
起碼五年過後,你終於知道要用JS了。

當初人家給你code你說太高級,真的笑死。


老話一句,你要做的不是伸手牌,五年了還在問這個?

提問的藝術:為什麼你該這樣問
一本書兩百塊買來省下你幾萬元的時間
提問的藝術:每個提問者都應該要注意的提問流程
線上文章至少讀過一次知道怎麼問 這也是禮貌問題
提問的智慧 - GitHub

只會問蠢問題的話,神仙都難救,學會發問的話你早就解決了。

不會自學就算了,拜託去看一次,不然解答你的問題比通靈還難。


五年前的答案就都給你了,你要的只是寫多個html檔案。

一個首頁,幾個年度的網頁。

index.html
109.html
110.html
111.html

年份網站裡面寫<img src=>放你些破圖片,
然後index裏面寫<a href="109.html">點我看109的破圖片</a>
就這樣。


是否有CSS寫法 或 JS寫法?

五年後再來問。

看更多先前的回應...收起先前的回應...
晨勤 iT邦新手 4 級 ‧ 2023-01-29 11:34:42 檢舉
我很遺憾沒想到在FB之餘,這裡也可以看到酸民,你不想回答就不用回答,也省得打這些字浪費時間,我也參加很多教學方面的族群,如數學、物理、法律等等,會就回答,不會就佃佃看別人的回答,或是沒時間就不回答,反正大神很多,每個領域都有其專業,我非在學學生,也不是靠這個吃飯,看的書也不如這裡的人多,對程式語言的見解也非常粗淺,可能有些大師講的話語我也不清楚,反之亦然,總之,只要花時間正面回應的,我都予以真心感謝,每個人在求知過程中總有困頓的時候,相信是不變的,也不要說你出生以來從來不發問,自己找解答的這種屁話,更不說不會問太解單的問題,試問你國小就有工程數學、微積分了嗎?! 
淺水員 iT邦大師 6 級 ‧ 2023-01-29 14:24:51 檢舉

我想盡量精確的描述問題會節省大家的時間
每個人時間都有限,應該不少人看到問得不清楚的問題就懶得回應的

另外我建議不妨去找個課程或是老師先上個課
畢竟有些東西當面說會比網路上這樣來回打字有效率太多了

Oo_花之舞__oO iT邦新手 1 級 ‧ 2023-01-29 18:55:56
【**此則訊息已被站方移除**】
晨勤 iT邦新手 4 級 ‧ 2023-01-29 21:58:45 檢舉

我之前上過課,老師不可能全部教,自己實作才會遇到問題,遇到問題不外乎是找資料和問人,不管哪個領域都一樣,我謝謝所有回答的人,如果問題發問的不清楚,我也在這裡致歉;至於生活在底層只想看別人不如意來顯示自己有存在價值的酸民,就慢慢哭腰,你才是可憐的人呀

花之舞
酸言酸語還沒關係,但人身攻擊就不好了。
酸要酸的有技術,有價值。
我建議您改一下你的文字用詞。
你這已經是人身攻擊了。

@㊣浩瀚星空㊣ 失態失態,大師所言甚是。
個人修養還需要加強,一時太興奮了XD
我自己也學到一課。

0
akajoke
iT邦新手 5 級 ‧ 2023-01-29 22:21:21

這發問心態跟回應真的很可憐,有種東西叫做家教。
沒有家教也需要自己學,
不是伸手牌,跩五八萬。
人家願意回答就代表比你聰明、比你努力、比你認真,只有井蛙會回嘴對嗆。

看更多先前的回應...收起先前的回應...
晨勤 iT邦新手 4 級 ‧ 2023-01-29 22:47:00 檢舉

你有真的看到是誰開始的嗎? 人與人本來就應互相尊重,如果花之舞沒引事端,我又何必浪費時間

akajoke iT邦新手 5 級 ‧ 2023-01-30 00:44:13 檢舉

我無心參戰,分享我的想法。
您要跟我戰的話是戰不起來的,因為我都只是給您建議。
不聽沒關係。

我只想說,來求教的人,本身就很弱勢。
畢竟,你確實是比人家不懂。

任何酸言酸語,您都要感謝。
這是求教的人基本心態。
因為你是有可能從這些酸言酸語中,得到你想要的解答。

當然了,如果承受不了,那就只好自已去找答案啦!

過來人的心態給你參考。
我的開蒙老師,就是一開始對我罵個不停的一位高手。
我從來都沒有不耐煩,無論他說的東西對我有用還是沒用。
我都會感謝他。
久而久之,他後期就開始告訴我要去哪邊哪邊找資料。
或是罵的提點我。

到現在我還是很感謝他。

畢竟,你跟會他們戰,已經失去你本來的目的。
想要有自尊就只能自已努力不求人。

PS:我就是那種會對人酸言酸言的人。只是最近有點修身養性而已。
要不然我會唸的更難聽的。

akajoke iT邦新手 5 級 ‧ 2023-01-30 18:03:18 檢舉

@㊣浩瀚星空㊣ 大師見解就是不同,其實很多時候,學得不只是技術,更是做人的態度。我默默學了很多!比發問得到答案還要有價值。

0
打雜工
iT邦研究生 1 級 ‧ 2023-01-29 23:01:08

其實您要的答案,網路大都搜尋的到,建議有空自己找一下,真的遇到瓶頸或找了很多資料仍看不懂的,再詢問那個關鍵點,或許會事半功倍,您在搜尋解答的過程也比較能學到東西,在搜尋的過程中雖然無法快速得到答案,但會更充實學習的基礎,過程中也會發現及學到其它不是那麼直接有關係的東西,這些意外收穫都會成為您未來學習旅途中的養分。

晨勤 iT邦新手 4 級 ‧ 2023-01-30 08:03:59 檢舉

謝謝您的指教,學習的過程誠如您說的一樣,但是我主要問讀取網站上的圖片檔,差別是用*.*的方式,就是一個眉角,網路上也找過了,就是不得其解才上網問的

aaron3399 iT邦好手 1 級 ‧ 2023-01-30 11:47:35 檢舉

這其實不是技術的眉角
而是前端與後端各自負責甚麼、以及能做到甚麼的架構觀念問題,這可能才是你一直搞不懂也找不到答案的關鍵點

我要發表回答

立即登入回答