文档章节

Ruby on Rails服务器文件上传

yushulx
 yushulx
发布于 2015/09/15 16:17
字数 663
阅读 648
收藏 1

最近看了下ruby on rails,试着把Dynamic Web TWAIN集成到ruby on rails中。这里分享下如何在rails中用几行代码搞定文件上传。

参考原文:How to Load, Scan and Upload Files with Ruby on Rails

作者:Desmond Shaw

翻译:yushulx

软件安装

在Windows上不要选择Ruby 2.2,不然在运行rails server的时候会报错:

nokogiri不支持,详情可以阅读https://github.com/sparklemotion/nokogiri/issues/1256

Rails创建工程的基本步骤

  1. 安装rails: 

    gem install rails
  2. 创建应用: 

    rails new dwt
  3. cd到dwt

  4. 启动服务

    rails server
  5. 访问http://localhost:3000

Rails集成Dynamic Web TWAIN上传文件

创建controller

rails generate controller twainscanning home

< Dynamic Web TWAIN directory >\Resources拷贝到< Rails Project >\public\Resources

打开< Rails Project >\app\views\twainscanning\home.html.erb添加下面的代码:

<html>
 
<head>
  <title>DWT with Ruby</title>
  <script type="text/javascript" src="Resources/dynamsoft.webtwain.initiate.js"></script>
  <script type="text/javascript" src="Resources/dynamsoft.webtwain.config.js"></script>
  <style>
    h1 {
      font-size: 2em;
      font-weight: bold;
      color: #777777;
      text-align: center
    }
    table {
      margin: auto;
    }
  </style>
</head>
 
<body>
  <h1>
            DWT with Ruby
  </h1>
  <table>
    <tr>
      <td>
        <!-- dwtcontrolContainer is the default div id for Dynamic Web TWAIN control.
                   If you need to rename the id, you should also change the id in dynamsoft.webtwain.config.js accordingly. -->
        <div id="dwtcontrolContainer"></div>
      </td>
    </tr>
 
    <tr>
      <td>
        <input type="button" value="Load Image" onclick="btnLoad_onclick();" />
        <input type="button" value="Scan Image" onclick="AcquireImage();" />
        <input id="btnUpload" type="button" value="Upload Image" onclick="btnUpload_onclick()">
      </td>
    </tr>
  </table>
 
  <!--Custom script goes here-->
  <script type="text/javascript">
    Dynamsoft.WebTwainEnv.RegisterEvent('OnWebTwainReady', Dynamsoft_OnReady);
    var DWObject;
 
    function Dynamsoft_OnReady() {
      DWObject = Dynamsoft.WebTwainEnv.GetWebTwain('dwtcontrolContainer'); // Get the Dynamic Web TWAIN object that is embeded in the div with id 'dwtcontrolContainer'
      DWObject.Width = 480; // Set the width of the Dynamic Web TWAIN Object
      DWObject.Height = 640; // Set the height of the Dynamic Web TWAIN Object
    }
 
    function btnLoad_onclick() {
      var OnSuccess = function() {};
 
      var OnFailure = function(errorCode, errorString) {};
 
      DWObject.IfShowFileDialog = true;
      DWObject.LoadImageEx("", EnumDWT_ImageType.IT_ALL, OnSuccess, OnFailure);
    }
 
    function AcquireImage() {
      if (DWObject) {
        DWObject.IfShowUI = false;
        DWObject.IfDisableSourceAfterAcquire = true; // Scanner source will be disabled/closed automatically after the scan.
        DWObject.SelectSource(); // Select a Data Source (a device like scanner) from the Data Source Manager.
        DWObject.OpenSource(); // Open the source. You can set resolution, pixel type, etc. after this method. Please refer to the sample 'Scan' -> 'Custom Scan' for more info.
        DWObject.AcquireImage(); // Acquire image(s) from the Data Source. Please NOTE this is a asynchronous method. In other words, it doesn't wait for the Data Source to come back.
      }
    }
 
    function btnUpload_onclick() {
      DWObject.HTTPPort = 3000;
      var CurrentPathName = unescape(location.pathname); // get current PathName in plain ASCII
      var CurrentPath = CurrentPathName.substring(0, CurrentPathName.lastIndexOf("/") + 1);
      var strActionPage = CurrentPath + "upload/";
      var strHostIP = "localhost"; // server IP e.g. 192.168.8.84
 
      var OnSuccess = function(httpResponse) {
        alert("Succesfully uploaded");
      };
 
      var OnFailure = function(errorCode, errorString, httpResponse) {
        alert(httpResponse);
      };
 
      var date = new Date();
      DWObject.HTTPUploadThroughPostEx(
        strHostIP,
        DWObject.CurrentImageIndexInBuffer,
        strActionPage,
        date.getTime() + ".jpg",
        1, // JPEG
        OnSuccess, OnFailure
      );
    }
 
  </script>
 
</body>
 
</html>

打开< Rails Project >\app\controller\application_controler.rb注释掉:

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  #protect_from_forgery with: :exception
end

打开< Rails Project >\config\routes.rb 添加映射:

Rails.application.routes.draw do
  get 'twainscanning/home'
  root 'twainscanning#home'
  post 'upload/' => 'twainscanning#upload'
end

打开< Rails Project >\app\controller\twainscanning_controller.rb添加文件上传代码:

class TwainscanningController < ApplicationController
  def home
  end
 
  def upload
    uploaded_io = params[:RemoteFile]
 
    upload_dir = Rails.root.join('public', 'upload')
    unless Dir.exist?(upload_dir)
      Dir.mkdir(upload_dir)
    end
 
    File.open(Rails.root.join('public', 'upload', uploaded_io.original_filename), 'wb') do |file|
      file.write(uploaded_io.read)
    end
 
    respond_to do |format|
      format.html.any { render text: "Successfully uploaded!"}
    end
 
  end
end

运行服务:

源码

https://github.com/dynamsoftsamples/dwt-ruby-on-rails


© 著作权归作者所有

yushulx
粉丝 29
博文 111
码字总数 62988
作品 0
杭州
私信 提问
Ubuntu 14.04 上使用 Nginx Passenger 部署 Ruby on Rails

本教程将会涉及以下工具: Ubuntu 14.04 LTS RVM Ruby 2.1.1 Rails 4.0.3 Passenger 4.0+ Nginx(由 Passenger 编译) 推荐通过 Vagrant 搭建虚拟机环境进行练习。 创建帐号 假设你已经用 ro...

小自在
2014/07/17
3.4K
0
使用Unicorn,nginx,Capistrano 部署你的Rails 应用

http://rubysource.com/deploying-your-rails-app-to-the-cloud-with-unicorn-nginx-and-capistrano/ 配置你的服务器 你需要在你的服务器上安装Ruby的环境,你可以使用RVM或者是rbenv. 上传到...

ifsc01
2012/06/11
2.1K
1
12 个基于 Rails 框架开发的 CMS 系统

Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,R...

红薯
2011/11/02
4.4K
6
Ruby on Rails的下载及安装以及开发环境的搭建

要基于ruby开发应用程序,我们必须安装ruby、gem、rails、mongrel。 第一,到官方网站上下载最新的Ruby One-Click Installer版本(已经自带了RubyGems,一个Ruby标准的包管理器),下载地址为...

神勇小白鼠
2011/03/02
532
0
开源网络应用框架--Rails

Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,R...

匿名
2008/09/15
76.6K
22

没有更多内容

加载失败,请刷新页面

加载更多

thinkphp5.1学习过程四——trait

<?php /** *trait实现了代码的复用 *并且突破了单继承的限制 *trait是类不是类,不能实例化 */ trait Demo1 { public function hello1() { return __METHOD__; } } trait Demo2 { public fu......

大海yht
26分钟前
6
0
DB2 sequence 操作

操作DB2 下 sequence seqName db2数据库一般seq还是比较大的,但是程序在调用的时候还是不可避免的有一些bug, 下面是对于seq一些简单的操作,也作为工作的一些记录 1、命令行取sequence se...

飞雪无痕
33分钟前
6
0
《吊打面试官》系列-秒杀系统设计

你知道的越多,你不知道的越多 点赞再看,养成习惯 GitHub上已经开源 https://github.com/JavaFamily 有一线大厂面试点脑图和个人联系方式,欢迎Star和指教 絮叨 之前写了很多Redis相关的知识...

敖丙
39分钟前
12
0
Qt编写气体安全管理系统11-数据打印

一、前言 在各种软件系统中,数据打印也是常用的功能之一,一般来说会对查询的数据结果导出到excel,还会对查询的数据结果直接打印,在Qt中提供了打印机类QPrinter,在printsupport组件中,可...

飞扬青云
45分钟前
5
0
初级阶段

#include <stdio.h> #include <stdlib.h> int main(){ int a; int Sn = 0; int i; int tmp = 0; scanf_s("%d", &a); for (i = 1; i <= 5; i++) { tmp = tmp * 10 + a; Sn += tmp; } printf("......

Lxxxxx256
46分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部