Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@Ryo-Todaka

Classic ASPでファイルアップローダーを作る

やりたいこと

Classic ASPでファイルアップローダーを作る。

BASP21ライブラリなしでできないか?

こちらのサイトに解説がありました。
送信されたバイナリの改行コードからフォーム情報を特定する方法でした。

フォーム項目が多いほど、改行位置からの特定が難しくなるのでBASP21を使った方が適切だと思います。

環境・ツール

  • Windows Server 2016
  • IIS
  • VBScript
  • BASP21

BASPのダウンロード・インストール

BASP21Down Load! Bsmtp20070629-587.lzh(119KB)からダウンロード

実装

送信フォーム
<%@ Language=VBScript %>
<%

%>
<html>
<body>
    <form method="POST" ENCTYPE="multipart/form-data" >
        <input type=file  name=img accept="image/*" >
        <br>
        <input type=submit formaction=test_basp.asp>
    </form>
</body>
</html>

受け取りサーバ
<%@ Language=VBScript %>
<%
dim total_bytes

' 1.総バイト数を読み込み
total_bytes = Request.TotalBytes
response.write("totalbytes:" & total_bytes & "<br>")

' 2.basp objを宣言
Set bobj = Server.CreateObject("basp21")

' 3.バイナリ読込
barray = Request.BinaryRead(total_bytes)

uploadDir = "D:\~~\dir\" ' サーバの保存先パスを指定する
filename = bobj.FormFileName(barray,"img")

' 4.サーバに保存
wblen = bobj.FormSaveAs(barray,"img",uploadDir & filename)
response.write("wblen:" & wblen & "<br>")

%>

解説

1.総バイト数を読み込み

Request.TotalBytesでフォームから送信された総バイト数を取得します。
その下のResponse.Write(...は取得した総バイト数を表示しているだけです。

2.basp objを宣言

BASP21オブジェクトを作ってます。

3.バイナリ読込

barray = Request.BinaryRead(total_bytes)で総バイト数を引数にして全バイナリをbarrayに読み込みます。
bobj.FormFileName(barray,"img")imgというnameのフォームのバイナリを取得します。

4.サーバに保存

bobj.FormSaveAs(barray,"img",uploadDir & filename)でサーバにバイナリデータをファイルとして保存します。
1つ目の引数barray・・・全バイナリデータ(barray)から探す。
2つ目の引数img・・・name=imgのフォームのバイナリデータを取得。
3つ目の引数uploadDir & filename・・・uploadDirのディレクトリに、filenameの名前で保存する。

wblenは成功時は正の数字で書き込んだバイト数が表示されます。
マイナスの時はエラーメッセージです。BASP21 proのメッセージリファレンスから内容確認できます。

備考

ENCTYPE="multipart/form-data"を指定するとRequest.Fromで値を取得できなくなるので、bobj.FormBinaryを使うことになります。

よもやま話

BASP21って何だろうと思ってたんですが、babaqさんの開発されたASPコンポーネントだからBASP、21は最初はバージョン番号だったらしいですが、babaqさんが気に入ってそのままコンポーネント名になったそうです。
読み方は「ビーエーエスピー にじゅういち」が本来の呼び方らしいですが、「ばすぷにーいち」と呼ばれているそう。

出典:Baba Centerfolds FAQ

0
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Ryo-Todaka
化学メーカーで社内向けWebシステムの設計・開発・運用を行なっています。 言語・技術:Python/PHP/django/flask/Ruby/Rails/postgreSQL/VBScript/IIS 備忘録としてQiitaを利用しています。 ブログ(https://yurukaiha.hatenablog.com)に猫・ガジェット・勉強したことなどを書いています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?