您在這裡

上傳"圖片"中文檔名問題

jackey's 的頭像
jackey 在 2012-04-16 (週一) 16:33 發表

請教各位先進
關於檔案中文檔名上船的問題我已經有改好了,也就是可以正常上傳、下載、刪除中文或英文檔案。
但是上傳中文檔名的"圖片"好像會有一點瑕疵,如附件這個位置如果上傳圖片經過我修改的程式碼不會有錯誤,確實有將圖片上傳到SERVER上,而且是中文的,也可以直接下載,但是如果我有開啟預覽視窗就會出現X,也就是無法預覽圖片,我確定是中文檔名圖片的問題,而且發現如果是中文檔名的圖片可以上傳到Server的路徑但是在Server的\default\files\styles\thumbnail路徑卻不會有縮圖,所以才會導致沒有預覽圖片,因為PHP實在不太好Debug所以我只好一行一行去看file.inc、image.module這兩個檔案,但是都沒有找到問題的所在,雖然還是可以正常使用(只要不要開啟預覽畫面就好),但總是有點不甘心,希望有好心人士可以指點迷津,謝謝。

補充一下:
環境為Drupal 7.12
Windows 7 64 bit

關於檔案中文檔名上船的問題我已經有改好了,也就是可以正常上傳、下載、刪除中文或英文檔案。

這是什麼意思 ??

D7.12 基本上能處理中文
http://drupaltaiwan.org/forum/20120202/6084#comment-20402

thumbnail 是即時產生, 我想到的可能性:
- 伺服器處理 UTF8 URL 問題
- 同上, 但出在瀏覽器身上
- 你自己的修改出錯
...

Kay大大你好
我想我應該沒有修改錯誤,thumbnail 是即時產生沒錯,所以英文檔名時都可以正常,甚至我有修改成用有括號的中文檔名也可以正常,例如:(測試).jpg,都可以正常,除了圖片之外所有"檔案"格式的上傳如果有中文檔名也都沒問題,那是因為檔案沒有"預覽"個功能,所以只有圖片上傳會有這狀況,或許有可能是伺服器處理 UTF8 URL 問題,只不過理論上應該有解,但我一職找不到相對應的code所以無從修改,希望大家多幫忙囉~
還有就是這問題無論IE或Firefox都一樣,應該不是單純瀏覽器相容性的問題。

是滴~~
還是說你們不會有問題呢?能否參考看看你們的file.inc因為我完全不改的情況是一定會有問題的。
除非是用Translator模組才會正常,但那不是我要的結果,因為那只是翻譯而已。

確定一下:
- 沒有修改情況下 (D7.12), 是不能上傳,還是沒有 thumbnail ??
- 使用 Apache ??
- 同一張圖片,英文名可以,但中文不能 ??

在這裏 Debug 看看
function image_style_deliver($style, $scheme) {
// Check that the style is defined and the scheme is valid.
if (!$style || !file_stream_wrapper_valid_scheme($scheme)) {
drupal_exit();
}

$args = func_get_args();

print '

';
  print_r($args);
  print '

';
die();

我來試試看,在此之前可能是我說的不夠詳細,再說明一下並附上更明確的圖片提供參考。
首先手動修改完file.inc檔之後無論是"檔案"或"圖片"都可以上傳到SERVER(如附件1),差別只在於"中文圖片"上傳後的"預覽"畫面會無法顯示(如附件2),"英文圖片"則會正常顯示"預覽"畫面(如附件1),所以不是不能上傳而是"中文圖"上傳完之後無法預覽縮圖,縮圖的位置是放在default\files\styles\thumbnail\裡面上傳完畢之後這裡並不會有圖片,因為就如同Kay所說是即時產生,也就是要執行縮圖的網址路徑才會default\files\styles\thumbnail\裡面產生縮圖(如附件3),但中文檔名圖片就無法正常辨識檔名所以會像(附件4)這樣。

Dear Amouro、Mark兩位大大
感謝您提供的資訊,我純粹因為不想使用transliteration模組來做翻譯轉換所以才希望能解決此問題
transliteration是Drupal 7最佳的解決方案了,但這樣下載下來的檔名就不會是中文的,目前我還在針對Drupal 7本身上傳模組(就是我PO文的這問題)找解決方案,並同時在解決IMCE模組的圖片上傳"中文檔名"辨識問題。
兩種方法都有解決80%但都仍然有缺陷,所以還在努力中,如果大家有什麼建議再麻煩提供囉,謝謝。

恩恩對啊,我還以為只有我會這樣,原來是大家沒發現,而且現在的IMCE模組如果要上傳中文檔名的圖片也很麻煩,雖然我已經改成可以正常用IMCE上傳中文檔名圖片,但還會有其他問題正在研究,不過這是另外一個議題啦,總覺得很多瓶頸....

看來是我記憶出錯了 ><" 抱歉抱歉 !!

你現在是用 ICONV 的方法嗎 ??

function image_style_deliver($style, $scheme) {
// Check that the style is defined and the scheme is valid.
if (!$style || !file_stream_wrapper_valid_scheme($scheme)) {
drupal_exit();
}

$args = func_get_args();
array_shift($args);
array_shift($args);
$target = implode('/', $args);

$target = iconv("utf-8", "big5", $target); // add this

太強了Kay大大!!
果然是這個地方出問題,現在中、英文都正常了
實在太感謝了只是沒想到$target裡面也存了中文字,無法像.NET一樣Debug還真是不太好找啊~

(豁然開朗)