天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 74|回复: 0

[函数] Lisp执行post上传文件到远程服务器

[复制链接]
  • TA的每日心情
    开心
    2024-8-31 15:58
  • 签到天数: 89 天

    [LV.6]常住居民II

    488

    主题

    207

    回帖

    3366

    积分

    管理员

    积分
    3366
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    (defun $upload$  (loc      target     lst    /       adostream
         err?      err-str    jgs    objhttp
         return-value         status    url       value-text
         size      header-vaule    REG       IP
        )
              ;二进制流的方式上传文件
              ;服务器的GO语言程序server必须是V16版本以上
      (if (and loc (setq size (vl-file-size loc)) target)
        (PROGN
          (IF (setq reg (reg-read "login" "PN"))
      (setq header-vaule
             (strcat
         reg
         "|"
         (apply
           'strcat
           (mapcar
             'vl-princ-to-string
             (vl-string->list (getenv "ComputerName"))
           )
         )
             )
      )
      (SETQ header-vaule (getenv "ComputerName"))
          )
          (OR (setq ip (cdr (assoc "IP" LST)))
        (SETQ IP (getenv "数据库地址"))
          )
          (OR (setq PORT (cdr (assoc "端口号" LST)))
        (SETQ PORT "80")
          )
          (OR (setq func (cdr (assoc "接口" LST)))
        (setq func ($fu-wu-qi-jie-kou$ "上传文件"))
        (SETQ func "upload")
          )
          (and ip
         port
         func
         (setq url (strcat IP ":" port "/" func)
         )
          )
          (cond
      ((not (setq ADOStream (vl-catch-all-apply
            'vlax-create-object
            (list "ADODB.Stream")
                )
            )
       )
       (princ "\n无法创建adodb.stream")
       (setq status nil)
      )
      ((or
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-put-property
              (list ADOStream 'type 1)
            )
           )
         )
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-invoke
              (list ADOStream 'open)
            )
           )
         )
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-put-property
              (list ADOStream 'Position 0)
            )
           )
         )
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-invoke-method
              (list ADOStream 'LoadFromFile loc)
            )
           )
         )
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-put-property
              (list ADOStream 'Position 0)
            )
           )
         )
       )
       (princ (vl-catch-all-error-message return-value))
       (princ "\n设置adostream失败")
       (setq status nil)
       (vlax-release-object ADOStream)
      )
      ((not (setq objHttp (vlax-create-object "Msxml2.XMLHTTP")))
       (princ "\n无法创建对象\"Msxml2.XMLHTTP\"")
       (setq status nil)
      )
      ((vl-catch-all-error-p
         (setq return-value
          (vl-catch-all-apply
            'vla-open
            (list objHttp "POST" url 0)
          )
         )
       )
       (princ (vl-catch-all-error-message return-value))
       (princ "\n无法到达远程主机")
       (setq status nil)
       (vlax-release-object objHttp)
      )
      ((or
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-invoke-method
              (list objHttp
              "setRequestHeader"
              "Upload-Filename"
              target
              )
            )
           )
         )
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-invoke-method
              (list objHttp
              "setRequestHeader"
              "Content-Type"
              "application/octet-stream"
              )
            )
           )
         )
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-invoke-method
              (list objHttp
              "setRequestHeader"
              ($fu-wu-qi-jie-kou$ "报文头标题")
              header-vaule
              )
            )
           )
         )
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-invoke-method
              (list objHttp
              "setRequestHeader"
              "Response-Charset"
              "UTF8"
              )
            )
           )
         )
         (vl-catch-all-error-p
           (setq return-value
            (vl-catch-all-apply
              'vlax-invoke-method
              (list objHttp "send" ADOStream)
            )
           )
         )
       )
       (princ (vl-catch-all-error-message return-value))
       (princ "\n无法与远程主机建立联系")
       (setq status nil)
       (vlax-release-object objHttp)
      )
      ((progn
         (vl-catch-all-apply
           'vlax-invoke-method
           (list ADOStream 'close)
         )        ;关闭文件流
         (if ADOStream
           (vlax-release-object ADOStream)
         )
         (while (not (eq (vlax-get-property objHttp "readyState") 4))
           (repeat 100)
         )
         (/= (vlax-get-property objHttp "readyState") 4)
       )
       (princ "\n与远程主机联系异常")
       (setq status nil)
       (vlax-release-object objHttp)
      )
      (t
       (progn
         (and
           (setq value-text
            (vlax-get-property objHttp 'responseText)
           )
              ;直接让系统ado组件返回text格式
           (setq status t)
         )
         (vlax-release-object objHttp)
         (IF (and (setq err? nil
            err? (vl-catch-all-apply
             'read
             (list (STRCAT "'(" value-text ")"))
                 )
            )
            (not (vl-catch-all-error-p err?))
             )
           (progn
             (setq jgs
              (car (car (EVAL (READ (STRCAT "'(" value-text ")"))))
              )
             )
             (AND jgs
            (= (TYPE jgs) 'LIST)
            (= (TYPE (CAR jgs)) 'LIST)
            (setq jgs
             (reverse
               (cons (cons "size-loc" (vl-princ-to-string size))
               (reverse jgs)
               )
             )
            )
             )
           )
           (progn
             (and err?
            (setq err-str (vl-catch-all-error-message err?))
             )
             (and err-str (print err-str))
             (and
         err-str
         (blsc value-text
               (strcat "数据库返回有问题_" err-str ".TXT")
         )
             )
           )
         )
         (IF (AND jgs
            (= (TYPE jgs) 'LIST)
            (= (TYPE (CAR jgs)) 'LIST)
            (= (TYPE (CAR (CAR jgs))) 'STR)
             )
           ()
           (SETQ JGS NIL)
         )
       )
      )
          )
        )
        (alert "上传文件的参数不能为空!")
      )
      jgs
    )


    ($upload$ "C:\\Users\\dcl\\Desktop\\11.png"
        "22"
        (list  (cons "IP" "http://cadx.top")
        (cons "端口" "8088")
        (cons "接口" "img")
        )
    )

     

     

     

     

    [函数] Lisp执行post上传文件到远程服务器
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池| |网站地图

    GMT+8, 2024-9-8 10:44 , Processed in 0.098717 second(s), 27 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表