先說結論
大多數檔案、大多數時候,傳就傳了,沒什麼事。正經的轉換器幾小時內就把你發過去的東西刪掉,也對你的度假照片毫無興趣。
問題不在於他們說謊,而在於你根本沒辦法判斷他們有沒有說謊。檔案一旦離開你的機器,之後那些說法就全靠你信:留多久、誰夠得著、有沒有被複制進一個比刪除定時器活得更久的備份、公司被賣掉或者被攻破時它會怎樣。這些從外面一樣都看不見。
所以真正有用的問題不是「我信不信這個站」,而是「這件事非得讓我的檔案離開不可嗎」。越來越多的工作,答案是不用;而只要答案是不用,那個信不信的問題,你就不必回答了。
「上傳」到底做了什麼
一個轉換器讓你選檔案,然後給你看一條進度條,這時候你的瀏覽器正在把整個檔案逐位元組複製過網際網路,送到一臺別人擁有的計算機上。那臺機器把它寫進硬碟,跑一遍轉換,把結果寫回同一塊硬碟,再給你一個連結。
那一刻起,你的檔案至少存在於三個不是你選的地方:伺服器的硬碟、記下這次請求的各種日誌,還常常有一個為了讓你下載得快而快取了結果的 CDN。一份刪除策略得管得到這三處。多數會說自己管得到。這三處你一處都查不了。
還有一點值得知道:到那邊的不只是檔案本身。檔名跟著走,檔案裡你看不見的一切也跟著走。一張剛出手機的照片,通常帶著精確的拍攝 GPS 座標、時間、相機序列號,有時候還嵌著一張你裁剪之前的原圖縮圖。對畫面很小心的人,往往對這些不小心,因為螢幕上什麼都沒顯示給他們看。
為什麼多數工具還是要上傳
不是因為他們想要你的檔案,而是因為在網頁存在的大半時間裡,壓根沒有別的辦法。瀏覽器解不了影片,也沒法按指定品質重編一張圖,更別說解析檔案格式;而一臺裝著 FFmpeg 和 ImageMagick 的伺服器可以。上傳不是商業模式,那是工作唯一能做的地方。
這件事在不久前悄悄地不成立了。瀏覽器現在帶著 WebAssembly,能以接近原生的速度跑同樣那些編譯好的編解碼器;帶著 WebCodecs,能直接用上你機器裡本來就有的硬體影片編碼器;還有一套 Canvas 介面,能直接解碼和重編圖片。當年非伺服器不可的工作,如今就跑在那臺本來就拿著檔案的裝置上。
仍然有大量工具在上傳,其中一些理由是正當的:一條現成的處理流水線沒人想重寫、某個格式在瀏覽器這邊確實沒有解碼器、某件事對手機來說真的太重。也有不那麼正當的理由:帳號、配額和付費等級都長在伺服器上。一個完全跑在你瀏覽器裡的工具,是很難按次計費的。
四項你自己就能做的檢查
這幾項對任何工具都管用,包括這一個。沒有哪一項需要你聽信誰的話,而第一項大約花十秒。
1. 拔線
把頁面開啟,然後關掉無線網或者拔掉網線,再用一次。在你瀏覽器裡運作的工具,跟剛才完全一樣。上傳的工具當場就不動了,因為運作的那個東西已經夠不著了。
這是最強、也最難作假的一項,因為它沒法靠措辭回答。沒有網路,轉換要麼完成,要麼完不成。
2. 盯著「網路」面板
開啟瀏覽器的開發者工具,切到「網路」,然後用這個工具。頁面發出的每一條請求都在那裡列著,帶著大小。你那張 4 MB 的照片要是被傳上去了,列表裡就有一條 4 MB 的請求。要是離開這個頁面的最大的東西不過是幾 KB 的廣告,那就沒有。
按大小排序,看最上面幾條。你不需要看懂這些請求,你只需要留意有沒有哪一條跟你的檔案差不多大。
3. 讀一讀 Content-Security-Policy
檢視頁面原始碼,在靠上的位置找 Content-Security-Policy。它是這個頁面被允許聯絡的地址清單,而且是由你的瀏覽器強制執行的,不是靠這個站的良好意願:凡是不在清單上的,請求一律被拒,程式碼怎麼折騰都沒用。
要緊的那一條是 connect-src,它管著這個頁面可以把資料發到哪裡。裡面要是列著一個屬於你正訪問的這個站的地址,那這個頁面就能把你的檔案發過去。要是裡面什麼都沒有,或者只有廣告網路這類第三方,那它就發不了。
一個壓根沒有 Content-Security-Policy 的頁面,並不說明它有什麼問題,只說明這一項檢查對它無話可說。
4. 讀程式碼
最費事,也最有決定性。一個工具要是公開原始碼、而且發出來的就是原始碼本身,沒有構建那一層,那你瀏覽器取到的檔案,就是你能讀的檔案。在裡面搜 fetch、XMLHttpRequest 和 sendBeacon,頁面能把東西發出去的方法就這三條,看看它們被餵了什麼。
多數人不會真去做這件事。但「做得到」本身仍然要緊,因為一個誰也無從核實的說法,算不上一個說法。
「在你的瀏覽器裡跑」不等於什麼
這話得說準,因為它被用得很鬆,而本站既然這麼要求別人,就得用同一把尺子量自己。
- 不等於一條請求都沒有。頁面本身就是從網上來的,而多數免費工具都帶著廣告或者統計,那些要跟別人說話。這句承諾說的是你的檔案,不是泛指所有流量。
- 不等於藏起你的 IP 位址。你訪問的每個網站都看得到它,本站也一樣。本地處理管的是你檔案裡的內容,不是匿名。
- 只要有一個功能要去取東西,這句話在那裡就不成立。讓你貼一個網址的工具必須去聯絡那個地址,而那臺伺服器就知道了你的 IP 和你要的是什麼。這是這個功能本身的性質,不是它的缺陷,但它確實是個例外,工具就該照直說,別含糊帶過去。
- 更不等於「我們會刪掉你的檔案」。後面這句說的是一家公司選擇怎麼做,前面那句說的是技術上有沒有可能。這兩句裡,只有一句是能核實的。
什麼時候上傳確實沒問題
這篇不是在說所有上傳都是錯的。內容不敏感、傳上去更省事,那就傳;工作對你的裝置來說確實太重,那就傳;格式在瀏覽器這邊確實沒有解碼器,那就傳;或者你用的本來就是一家你已經有關係、條款也真讀過的服務,那也傳。
要更小心的,是那些你不會公開發出去的檔案:身份證件、醫學影像、合同,任何帶著你無意分享的住址或者面孔的東西,還有那種你壓根沒看過位置資訊的照片。這些,寧可選一個你能核實的工具,而不是一個你只能信任的工具。這不是因為被信任的那個多半會辜負你,而是因為在能核實的那個面前,這個問題根本不會出現。
這四項檢查,本站自己答一遍
一篇讓別人去查、自己卻要求豁免的指南,那也太奇怪了。所以,按順序來:
- 拔線。隨便開啟這裡的哪個工具,斷網,它照常運作。每個工具頁上都有一個即時指示,告訴你此刻是不是線上,你可以盯著它變。
- 網路面板。轉點什麼,然後讀那份列表。沒有哪一條帶著你的檔案、它的縮圖、檔名、大小,或者從裡面讀出來的任何東西。本站沒有哪個自定義統計事件手裡有這些可發。
- Content-Security-Policy。它就在每個頁面原始碼的頂上。
connect-src裡列著 Google 的廣告和統計端點,還有捐助按鈕,別的什麼都沒有。那份清單上沒有一個地址屬於本站,因為本站根本沒有伺服器,它就是一堆靜態檔案。就算有什麼東西想發,也沒地方可發。 - 程式碼。每一行都公開。構建過程除了去掉註釋和空白什麼都不做,而且你可以自己跑一遍,拿結果跟實際發出來的內容對一對。
例外也擺在明處,不埋著:本站帶 Google 廣告和一個訪問統計,兩者都要跟 Google 說話,但關於你檔案的資訊,一條都不給它們;另外,圖片轉影片可以從你貼進去的網址取一張圖,那臺伺服器因此看得到你的 IP。隱私頁把這兩件事都寫全了。
這裡每個工具都是這麼做的:能壓到你指定大小的圖片壓縮、影片裁剪、專治本頁上面說的那些隱藏資料的 EXIF 檢視與清除、圖片轉影片,還有圖片轉 PDF。全部免費,不用帳號,也沒有一個有地方可以把你的檔案發出去。