分類
好用軟體

Google表單上傳檔案

最近在填寫商場活動表單時, 需要上傳發票檔案, 才發現原來 Google 表單也可以上傳檔案, 於是動手來試試.

新增一個表單, 然後在題型這裡選擇-檔案上傳, 會跳出一個提示:

作答者可將檔案上傳到雲端硬碟

檔案會上傳到表單擁有者的 Google 雲端硬碟。在表單中新增檔案上傳問題後,作答者必須登入 Google 才能回答問題。請務必只與你信任的對象共用這份表單。

看起來可以上傳檔案, 不過需要有 google 帳號且登入 google 帳號的狀況下才能上傳.

而上傳空間也預設總量為 1GB (此限制為1張表單內的使用空間量), 量到後也會停此收集這個表單作答. 網路上查了一下, 原來在 2017 年時, 就有這個功能了, 真是後知後覺, 沒關係, 還是動手來做一下:

https://forms.gle/GhpXvKrUEQEzLQhJ6

應用在做問卷時, 需要拍照, 或是上傳文件, 非常方便實用的一個表單功能.

PS. 用戶上傳的檔案會佔用自己的 google drive 空間, 並且以新開一個目錄的方式來收集檔案. 收集的檔案名稱最後會附加上用戶的google帳號名稱(display name), 雖然會佔用空間, 但也是確保能有效收集到檔案的方式, 在使用上要留意自己的空間是否充足. (如下圖, 擁有者都會是自己)


繼續閱讀:

https://diary.tw/archives/684

https://www.thenewslens.com/article/73365

單一目錄內大量檔案排序

這個是一個很麻煩的狀況, 在 windows 下, 使用 NTFS 的 Filesystem, 單一目錄可以承載的檔案量其實很大(是 2^32 -1 也就是 4294967295, 其實是整個 volume 不是單一目錄, 但這個上限應該在檔案存滿前是不太會到達的), 但是若是要排序檔案大小, 雖然說可以使用 dir /os 的方式來進行, 不過因為數量過大, 所以往往會很久很久, 而且會鎖住 filesystem.

接下來是實務上要將單一目錄下數量很多的檔案進行依大小排序時的作法.

1. 先將檔案列出來, 但不用排序: dir > dir.txt

2. 利用 sort 指令來進行排序: sort dir.txt /+25 > dirsorted.txt

這個 /+25 可以利用 sort /? 來看參數的用法, 其實是 dir 出來的內容, 列舉如下:

其中的第 25欄起是檔案的大小, 依此來排序的指定方式. 而後面的輸出轉向 > 就是用來將排序好的內容再轉存到另外一個檔去.

利用這樣的方式, 可以避免 dir /os 的時間過久, 直接 dir 輸出結果, 再利用 sort 指令來進行排序, 除了可以分開作業外, 還能大幅提高排序的時間, 是比較理想的方式.

當然, 若是檔案數量不多的時候, 是沒什麼差異的, 當檔案數量多的時候, 可是很有用的!

PS: NTFS 單一 volume 下的檔案數量上限:
http://technet.microsoft.com/en-us/library/cc938432.aspx
http://kewang.pixnet.net/blog/post/24972241

表單上傳檔案取得檔名問題

在前端網頁上, 若要上傳檔案, 是利用一個 <input type=file>的標籤來進行的, 這個 UI 看起來的長像在不同瀏覽器會有不同的結果, 也因為這樣, WEB DESIGNER 常常需要做一些設計來美化及一致化這個長相.

這篇文章不是在討論這個上傳檔案的長相, 而是要探討在前端程式碼取出上傳檔案的名稱, 這個也在不同的瀏覽器有不同的結果, 尤其新的瀏覽器又增加了一些特異功能. (如隱藏路徑)

這樣一來, 若是要對上傳檔案名稱欄位取出做一些判斷的話, 可要注意這些狀況的差異, 這裡寫了個小程式, 取出 <input type=file>的值, 在不同瀏覽器下可以測出不同的結果, 連結在這裡:

http://sample.diary.tw/25

我們以上傳 C:\test\1.txt 為例, 在不同瀏覽器下的結果如下:

IE9:
Firefox 4.01
Google Chrome 5:
Safari 5:
從上面畫面的結果來看, 發現 IE9 及 Google Chrome 會有含路徑的檔名, 但會隱藏路徑, 而 Firefox 4.01及 Safari 5則只會出現檔名而已, 不會有路徑, 而 IE6, IE7, IE8 的狀況則是 IE8 會像 IE9 一樣, 但 IE7, IE6 則是真實的檔案路徑, 如下:

IE6:
IE7:
IE8:
這樣就清楚啦!

利用ashx傳送檔案下載

在 asp.net 中, 若要實現檔案下載處理的方式(並且要進行 url 隱藏及下載管理), 可以利用 ashx (generic handler) 來進行, 方式很單純, 主要是在 header 上下一些手腳, 方式如下:

<%@ WebHandler Language="C#" Class="file" %>

using System;
using System.Web;

public class file : IHttpHandler {
    
    public void ProcessRequest (HttpContext context) {
        //context.Response.ContentType = "text/plain";
        //context.Response.Write("Hello World");
        //context.Response.ContentType = "image/png";
        //context.Response.TransmitFile("images/m2.png");        
        context.Response.ContentType = "application/octet-stream";
        context.Response.AppendHeader("Content-Disposition", "attachment; filename=test.doc");
        context.Response.TransmitFile("files/test.doc");        
        
    }
 
    public bool IsReusable {
        get {
            return false;
        }
    }

}

使用的方式若是處理檔案下載, 可以利用 application/octet-stream 這個 ContentType header , 並配合 Content-Disposition header 中, 利用 attachment; filename=xxxx 的方式來將檔案名稱指定給客戶端, 參考資料: http://support.microsoft.com/?scid=kb%3Ben-us%3B260519

而之後再利用 TransmitFile() 方法, 將在 server 上的檔案讀取出來並傳送到客戶端, 至於使用 TransmitFile 方法和其他方法的比較如這篇文章所示: http://blog.miniasp.com/post/2008/03/Caution-about-ASPNET-Response-a-Large-File.aspx

一般來說, 若是大檔案, 可以直接利用 TransmitFile 的方式來進行, 但不是太大型檔案, 有續傳需求時, 則不適用, 但效率上是以 TransmitFile 的效率最佳(因為不用先整個讀到記憶體中).

其他人的比較資料:
[ASP.NET] 無網址的檔案下載 – 進階研究 http://gogo1119.pixnet.net/blog/post/27407222

[2010/2/12 14:48]
相關文章: http://edu.uuu.com.tw/data_article/article/100212tips.htm

分類
好用軟體

Email夾大的檔案

有時候會需要傳送大的檔案給朋友.

在這時候有幾個做法,

  1. msn傳檔 (或skype傳檔等IM的方式)
  2. 透過 gmail 傳檔(其實是利用 gmail 寄信的方式, 但因為雙方都用 gmail, 速度可以快很多)
  3. 透過 web 寄存檔案的方式, 例如 badongo (http://www.badongo.com/)
  4. 透過這篇文章介紹的 filemail 服務 (http://www.filemail.com/)
  5. 透過 ftp, http 等方式(但必須自有主機才行, 門檻較高, 而且速度也不見得快)

這次介紹的 filemail 其實和 badongo 相當類似, 只是更直接, 由它的 domain name 可以很清楚的看出來是用來寄 file 的 mail. 但其實就是檔案透過 web 寄存的方式, 只是他有更多的管理條件, 而且有蠻方便的 zip 全部下載的方式, 也相當貼心.

上傳是透過 flash 的方式, 可以支援多檔同時上傳, 另外可以設定密碼(需付費), 設定允許下載次數(free 最多20次), 設定有效日數(free最多3日). 進階設定畫面如下:

並可以於上傳時, 同時寄送 email 給收件人(仍是帶連結回到 web 進行下載的方式), 下載介面可以 preview 圖片檔, 並可以利用 zip 方式將所有檔案壓縮後以一個檔案的方式下載.

雖然說 free 有些限制, 不過上傳下載速度都還不錯, 而且 free 就有 2gb 可以用, 真的還蠻方便的, 若有傳檔的需求, 臨時又沒有其他好方式, 可以利用這個方法來協助傳檔哦!

這邊是該網站說明他的服務及比較: http://www.filemail.com/about.aspx

[2008/9/2 9:57]
今天在看自己之前的 hemidemi 書籤時, 發現其實之前就有很有用的資訊了, 貼上來給大家參考:
超限傳檔術-超級快的18個傳檔方式

如何判斷WMV, WMA, ASF的檔案

wmv, wma 的判斷方式, 是利用這篇參考資料進行實作的:

http://www.microsoft.com/windows/windowsmedia/forpros/format/asfspec.aspx

裡面有一篇非常詳細的 asf 檔案格式的描述, 根據這篇的描述, 我們可以進行程式實作來判定 asf 及 wmv 和 wma, 主要的判定是利用 header 中的 stream type 來進行判斷的, 首先先讀出 asf 的格式檔頭, 讀出 guid 如下: (c#)

Guid guidASF_Header_Object = new Guid("75B22630-668E-11CF-A6D9-00AA0062CE6C");

Stream stream = new FileStream(filename, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(stream);
           
Guid guidTemp;
byte[] arrbyteGuid = new byte[guidSize];

arrbyteGuid = br.ReadBytes(guidSize);
guidTemp = new Guid(arrbyteGuid);

if (guidTemp == guidASF_Header_Object) // this file is asf format
{
  // .....
}

上面確定為 asf format (可能是 wmv 也可能是 wma), 接下來再進行確認其內容是否有 audio 及 video 的狀況, 來判定應為 wmv 或 wma.

我們必須先找出 header object 為 ASF_Stream_Properties_Object 的內容為 ASF_Audio_Media 或 ASF_Video_Media 的狀況, 通常 wma 僅有 ASF_Audio_Media, 而 wmv 為 ASF_Audio_Media 及 ASF_Video_Media 都存在, 所以就繼續找出 stream 的 type 即可, 程式碼在此, 給大家研究看看, 節省大家在判定這些檔案的時間囉!

checkASF.zip