我一直在尝试重新实现像Mozilla Hacks网站上的 HTML5图像上传器,但它适用于WebKit浏览器.部分任务是从canvas对象中提取图像文件并将其附加到FormData对象以进行上载.
问题是虽然canvas具有toDataURL返回图像文件表示的函数,但FormData对象仅接受来自File API的 File或Blob对象.
Mozilla解决方案使用以下仅限Firefox的功能canvas:
var file = canvas.mozGetAsFile("foo.png");
Run Code Online (Sandbox Code Playgroud)
...在WebKit浏览器上不可用.我能想到的最好的解决方案是找到一种方法将数据URI转换为File对象,我认为它可能是File API的一部分,但我不能为我的生活找到一些东西.
可能吗?如果没有,任何替代方案?
谢谢.
嗨,我实际上是通过ajax将一个base64图像字符串发送到一个php脚本,它只解码字符串并将内容保存为.jpg文件.
但结果是空图像.
这怎么可能?
php脚本:
$uploadedPhotos = array('photo_1','photo_2','photo_3','photo_4');
foreach ($uploadedPhotos as $file) {
if($this->input->post('photo_1')){
$photoTemp = base64_decode($this->input->post('photo_1'));
/*Set name of the photo for show in the form*/
$this->session->set_userdata('upload_'.$file,'ant');
/*set time of the upload*/
if(!$this->session->userdata('uploading_on_datetime')){
$this->session->set_userdata('uploading_on_datetime',time());
}
$datetime_upload = $this->session->userdata('uploading_on_datetime',true);
/*create temp dir with time and user id*/
$new_dir = 'temp/user_'.$this->session->userdata('user_id',true).'_on_'.$datetime_upload.'/';
@mkdir($new_dir);
/*move uploaded file with new name*/
@file_put_contents( $new_dir.$file.'.jpg',$photoTemp);
}
Run Code Online (Sandbox Code Playgroud)
对于ajax来说没关系因为,echo $ photoTemp返回字符串.
我试过var_dump(@file_put_contents( $new_dir.$file.'.jpg',$photoTemp));,它返回,bool(true)因为图像被保存但图像中没有内容:(空图像
对于空图像,我的意思是,文件是创建和命名的,它与我传递给php的内容大小相同,但是当我尝试打开该图像进行预览时,文件无法打开,因为文件损坏或损坏类型格式
无论如何这是将照片作为base64并将其发送到php的JS:
<script type="text/javascript">
var _min_width = 470;
var _min_height = 330; …Run Code Online (Sandbox Code Playgroud) 我是 Node Js 的新手。我需要包含用户的个人资料图片。我从 IOS 应用程序收到 base64 图像请求。我需要将它存储在图像文件夹中并将图像路径保存在 mongodb 数据库中。
我使用了以下代码,
var bitmap = new Buffer(req.body.profile_image, 'base64');
// write buffer to file
fs.writeFileSync("images/example.jpg", bitmap);
Run Code Online (Sandbox Code Playgroud)
其中 req.body.profile_image 是 base64 图像。
我收到以下错误,
TypeError: First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.
Run Code Online (Sandbox Code Playgroud)
req.body.profile_image 值将是,
+MZScHeJQ9Cz5dfxnEmIMHWMZyZYnYx8Rrhj0HbtfGUanv5w3UHUyADbiGsKJxeM1yV4uGwBS7cYlAec1w0AX6xg2A1O854UF8OS6PAP1MtzkeFnrNlD41U8XFeGrp1fn3jRMUs8sqS61umSS2rR2NDhppjZ4OvnOWBAq6X+sQNkhKkfZOdYsZOpz8fWIQb6wQ/GchVCgfZko4PMDg1DSumausG6o+2E6wKLLjKReUaHEQXKJV8h85XEKN4p/WEBvTHmmJ/IN178YJVgrGmfOScAuBPp+sggGA7/wC1kgbDiacbGABOcCLHVRpMuBQh5Xn4xqARF03pwkJT23LhxGLiSGp8mCVWDrzPf3iwp4C3nDSg2VUfNwgDvm6vrIiFJvp8ZHIdjoFx8BX0OH0+8TVii3GAKKc2kjz7dYqUCdsuMOm2hrr+h//Z
Run Code Online (Sandbox Code Playgroud)
请帮忙。
我在内存中有一个文件(在缓冲区中),它在文件系统上不存在(所以我不能只传输它).
我正在尝试使用HTTP 将其发送到SignServer.
这是我尝试这样做的方式:
var formdata = require('form-data'); var form = new formdata();
form.append('workerName', 'PDFSigner');
form.append('data', file_buffer);
// or
// escape(file_buffer.toString('binary'))
// or
// file_buffer.toString('binary') (without escaping)
var request = form.submit('http://localhost:8080/signserver/process', function(err, res) {});
Run Code Online (Sandbox Code Playgroud)
当我尝试追加file_bufferSignServer时说它data是空的:
状态400 - 上载时缺少文件内容
当我尝试追加时escape(file_buffer.toString('binary'))(如在HTTP请求中如何发送缓冲区中的建议?),这是同一个故事.
当我尝试追加file_buffer.toString('binary')node.js崩溃说:
node:../ src/stream_base.cc:157 int node :: StreamBase :: Writev(const v8 :: FunctionCallbackInfo&):断言`(偏移)<=(storage_size)'失败.
中止(核心倾倒)
如何在Node.JS中通过HTTP(multipart/form-data)正确发送文件(缓冲区)?