栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何通过HttpUrlConnection将图像从Android客户端发送到Node.js服务器?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何通过HttpUrlConnection将图像从Android客户端发送到Node.js服务器?

我建议上传二进制数据。您可以将图像元数据(例如名称,类型,用户ID等)放置为url参数或自定义HTTP标头(X -…)。

Android客户端代码(未经测试!):

 public static void postData(Bitmap imageToSend) {        try        { URL url = new URL("http://myserver/myapp/upload-image"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setDoInput(true); conn.setDoOutput(true); conn.setRequestProperty("Connection", "Keep-Alive"); conn.setRequestProperty("Cache-Control", "no-cache"); conn.setReadTimeout(35000); conn.setConnectTimeout(35000); // directly let .compress write binary image data // to the output-stream OutputStream os = conn.getOutputStream(); imageToSend.compress(Bitmap.CompressFormat.JPEG, 100, os); os.flush(); os.close(); System.out.println("Response Code: " + conn.getResponseCode()); InputStream in = new BufferedInputStream(conn.getInputStream()); Log.d("sdfs", "sfsd"); BufferedReader responseStreamReader = new BufferedReader(new InputStreamReader(in)); String line = ""; StringBuilder stringBuilder = new StringBuilder(); while ((line = responseStreamReader.readLine()) != null)     stringBuilder.append(line).append("n"); responseStreamReader.close(); String response = stringBuilder.toString(); System.out.println(response); conn.disconnect();        }        catch(MalformedURLException e) { e.printStackTrace();        }        catch(IOException e) { e.printStackTrace();        }}

Node.js,快速代码:

function rawBody(req, res, next) {    var chunks = [];    req.on('data', function(chunk) {        chunks.push(chunk);    });    req.on('end', function() {        var buffer = Buffer.concat(chunks);        req.bodyLength = buffer.length;        req.rawBody = buffer;        next();    });    req.on('error', function (err) {        console.log(err);        res.status(500);    });}app.post('/upload-image', rawBody, function (req, res) {    if (req.rawBody && req.bodyLength > 0) {        // TODO save image (req.rawBody) somewhere        // send some content as JSON        res.send(200, {status: 'OK'});    } else {        res.send(500);    }});

我将尝试解释node.js部分:该函数

rawBody
充当Express中间件。发出
POST
请求时,该函数将与请求对象一起调用。它注册了听众
data
end
error
事件。这些
data
事件将所有传入的数据块追加到缓冲区。当
end
火灾,该属性
rawBody
在请求对象被创建并包含二进制数据(图像斑点)。
rawBody()
然后将控制权转移到下一个处理程序,该处理程序现在可以将blob保存到您的数据库或文件系统中。

当处理真正的大数据斑点时,这种处理方法不是最佳方法。最好将数据流传输到文件或数据库以节省内存。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/448728.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号