当前位置: 首页 > 知识库问答 >
问题:

node.js通过socketio-file-upload从ipad上传图像

田柏
2023-03-14

我正在用express.js/node.js编写一个应用程序

我有一个输入类型为“文件”的表单用于上传图像。

我要我的图像直接上传,没有用户确认。并将其存储到目录中后显示在用户屏幕上。

为此,我使用socketio-file-upload库。

在电脑上很好用。我可以上传我的图像并显示它们。

问题出在Ipad上(我还没试过Iphone)

在web app上,当我点击“浏览”按钮时,我可以选择一张已有的图片或拍摄一张图片。我试着拍一张照片上传,但什么也没有...

下面是服务器上传的代码:

io.of('/register').on('connection', function (socket) {
/***************FILE UPLOAD***********************/
// Make an instance of socketioFileUploadServer and listen on this socket:
var uploader = new socketioFileUploadServer();
uploader.dir = __dirname + '/client/tmp/markers';
uploader.listen(socket);
// Do something when a file is saved:
uploader.on('saved', function(event){
    console.log('Original saved');
    // resize and rename image with a unique id
    var newName = Math.random().toString(36).substr(2, 9);
    // marker 32x32
    easyimg.rescrop({src:path.resolve(__dirname, 'client/tmp/markers/' + event.file.name), dst:path.resolve(__dirname, 'client/tmp/markers/' + newName + '_marker'), width:32, height:32}, function(err, image) {
        if (err) throw err;
        console.log('Resized and cropped: ' + image.width + ' x ' + image.height);
        // marker is uploaded - resized - croped, now display it
        socket.emit('displayMarker', {markerPath : '/tmp/markers/' + newName + '_marker', markerName : newName});
        // remove original from file system
        fs.unlink(path.resolve(__dirname, 'client/tmp/markers/' + event.file.name), function(){
            if (err) throw err;
            console.log('Original removed'); 
        });
    });
});

uploader.on('start', function(event){
    console.log('Client start upload');
    socket.emit('displayOverlay');
});

// Error handler:
uploader.on('error', function(event){
    console.log("Error from uploader", event);
});
});

和客户端:

document.addEventListener("DOMContentLoaded", function(){

// REGISTRATION MARKER 
var socketMarker    = io.connect('/register'); 
var siofuMarker     = new SocketIOFileUpload(socketMarker);

siofuMarker.listenOnInput(document.getElementById("uploadMarkerFromExploratorInput"));

// Do something when a file is uploaded:
siofuMarker.addEventListener("complete", function(event){
   $('.overlay').hide(); 
});

// display loader window
socketMarker.on('displayOverlay', displayOverlay);

// server send we can display the marker in the register step1 view
socketMarker.on('displayMarker', function(data) {
    $('#markerImage').html('');
    $('#markerImage').html('<img src="' + data.markerPath + '" />');
    $('#markerImageName').val(data.markerName);
});

});

对于计算机,控制台将显示:

Client start upload
Original saved
Resized and cropped: 32 x 32
Original removed

而使用Ipad:

Client start upload

是否有人有一个想法或另一种方法有同样的结果?

接受你的帮助。C..

共有1个答案

栾和风
2023-03-14

正如我所怀疑的,您需要为文件输入元素添加适当的属性到HTML标记:

<input type="file" accept="image/*" capture="camera">

那应该能奏效。要理解的最重要的部分是“accepts”属性。

 类似资料:
  • 我们提供了上传文件的示例。 为了开发这个应用程序,我们使用了HTML,CSS和AngularJS。 以下示例显示了如何使用AngularJS上载文件。 <html> <head> <script src = "https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"> </script

  • 本文向大家介绍angular2 ng2-file-upload上传示例代码,包括了angular2 ng2-file-upload上传示例代码的使用技巧和注意事项,需要的朋友参考一下 Angular2中有两个比较好用的上传文件的第三方库,一个是ng2-file-upload,一个是ng2-uploader。ng2-uploader是一个轻便的上传文件的支持库,功能较弱,而ng2-file-uplo

  • 这是个silverlight 5.0程序, 就一个上传文件功能,支持断点续传,多文件同时上传

  • 定义 上传组件。 图片展示 代码演示 import Upload from 'pile/dist/components/upload' const { UploadImage, UploadImageArray } = Upload; // 单张图片上传 <UploadImage onLoadSuccess={(o) => { console.log(o); }} /> // 多张图片上传(默

  • Upload 上传 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 可以通过设置file-list参数(数组,元素为对象),显示预置的图片。其中元素的url属性为图片路径 设置action参数为后端服务器地址,注意H5在浏览器可能会有跨域限制,让后端允许域即可 <template> <u-upload :action

  • 通过点击或者拖拽上传文件 点击上传 通过 slot 你可以传入自定义的上传按钮类型和文字提示。可通过设置limit和on-exceed来限制上传文件的个数和定义超出限制时的行为。可通过设置before-remove来阻止文件移除操作。 <el-upload class="upload-demo" action="https://jsonplaceholder.typicode.com/po