Javascript 使用blob创建的图像仅包含数字和逗号
我的设备上有一个文件存储在如下文件夹中:Javascript 使用blob创建的图像仅包含数字和逗号,javascript,php,tizen,Javascript,Php,Tizen,我的设备上有一个文件存储在如下文件夹中: /opt/share/folder/image.jpg 我想使用一些ajax请求在我的服务器上上传这个文件,就像使用标准HTML表单一样 经过几次搜索,我创建了一个Blob文件并上传到服务器上;这很有效。但问题是到达时我的jpeg已损坏,并且包含一系列数字和逗号(从技术上讲,是源文件的字节): Tizen的文件系统API允许我打开这个文件并读取它的字节——我就是这么做的。因此,我使用以下代码读取字节,创建blob并将其上载到我的服务器上: var ra
/opt/share/folder/image.jpg
我想使用一些ajax请求在我的服务器上上传这个文件,就像使用标准HTML表单一样
经过几次搜索,我创建了一个Blob文件并上传到服务器上;这很有效。但问题是到达时我的jpeg已损坏,并且包含一系列数字和逗号(从技术上讲,是源文件的字节):
Tizen的文件系统API允许我打开这个文件并读取它的字节——我就是这么做的。因此,我使用以下代码读取字节,创建blob并将其上载到我的服务器上:
var raw = fs.readBytes(1024);
var blob = new Blob([raw], {type:"image/jpeg"});
var formData = new FormData();
formData.append('screenCapture', blob);
$.ajax({
type: 'post',
url: myurl,
processData: false,
contentType: false,
data: formData,
success: function(data){
...
},
error: function(jqxhr, status, msg){
console.log("ERROR! " + msg);
}
});
我终于发现我的代码出了什么问题 事实上,readBytes返回一个与字节对应的数字数组,但该数组的格式不是字节数组 从该阵列创建新的Uint8Array实现了以下目的:
var raw = fs.readBytes(1024);
var byteArray = new Uint8Array(raw);
var blob = new Blob([byteArray], {type:"image/jpeg"});
我相信您的Ajax请求是以JSON而不是二进制表示的形式发送数据。您需要在服务器上将json转换回二进制格式。您还可以考虑将图像转换为Base64格式,然后通过导线发送。通过这种方式,您可以确保数据不会因某些字符集转换等而损坏。@treeno数据将作为表单数据发送,这意味着创建的文件将正确到达服务器端。但是尝试将这个blob作为img附加到blueimploadimage库中会发现这个blob在源代码处是不正确的。readBytes似乎没有创建正确的字节数组?
var raw = fs.readBytes(1024);
var byteArray = new Uint8Array(raw);
var blob = new Blob([byteArray], {type:"image/jpeg"});