imdapro-nativescript-http-formdata
一个 NativeScript 插件,可以将文件作为 multipart/form-data 发送到服务器。
npm i --save imdapro-nativescript-http-formdata
- 版本:2.0.1
- GitHub: https://github.com/Imdapro/nativescript-http-formdata
- NPM: https://npmjs.net.cn/package/imdapro-nativescript-http-formdata
- 下载
- 昨天:0
- 上周:0
- 上个月:0
一个 NativeScript 插件,可以将文件作为 multipart/form-data 发送到 iOS 和 Android 服务器。需要 NS 6.1.0+,如果安装了旧版本的 NS 平台,请使用旧版本。
版本
[2.0.0] 升级到 NS 6.2.0。修复 Kotlin 问题。更多信息 在这里
[1.6.0] 在 iOS 和 Android 中添加了通用响应,而不是由原生 API 返回。感谢 virtualbjorn
[1.5.0] 现在支持自定义头信息
添加插件
tns plugin add nativescript-http-formdata
依赖项
Android | iOS |
---|---|
okhttp3 | OMGHTTPURLRQ |
TypeScript
import { TNSHttpFormData, TNSHttpFormDataParam, TNSHttpFormDataResponse } from 'nativescript-http-formdata';
使用 ImagePicker 插件或其他。https://github.com/NativeScript/nativescript-imagepicker
private test() {
let context = imagepicker.create({
mode: "single" // use "multiple" for multiple selection
});
context.authorize()
.then(function() {
return context.present();
})
.then((selection) => {
let item = selection[0];
//UIImage for iOS and android.graphics.Bitmap for Android
item.getImageAsync(async (image, error) => {
let fd = new TNSHttpFormData();
//create params. You can upload an array of params i.e multiple data. For every parameter you need to give unique name
//so you can get it on server. Check below how to grab it in ASP.Net MVC
let params = [];
let imageData: any;
if(image) {
if(image.ios) {
imageData = UIImagePNGRepresentation(image);
} else {
//can be one of these overloads https://square.github.io/okhttp/3.x/okhttp/okhttp3/RequestBody.html
let bitmapImage: android.graphics.Bitmap = image;
let stream = new java.io.ByteArrayOutputStream();
bitmapImage.compress(android.graphics.Bitmap.CompressFormat.PNG, 100, stream);
let byteArray = stream.toByteArray();
bitmapImage.recycle();
imageData = byteArray;
}
}
let param: TNSHttpFormDataParam = {
data: imageData,
contentType: 'image/png',
fileName: 'test.png',
parameterName: 'file1'
};
params.push(param);
let param2: TNSHttpFormDataParam = {
data: "John Doe",
parameterName: "firstName"
};
params.push(param2);
try {
const response: TNSHttpFormDataResponse = await fd.post('http://10.10.10.149:10025/home/fileupload', params, {
headers: {
test1: "test1 value",
"x-version-no": "2.0"
}
});
console.log(response);
} catch (e) {
console.log(e);
}
});
}).catch(function (e) {
console.log(e);
});
}
现在在服务器上抓取文件(s)在 ASP.Net MVC 中,您可以参考 https://stackoverflow.com/a/16256106/859968 或以下内容
[HttpPost]
//file1 and file2 are parameters name as given in NativeScript object. They must match
public ActionResult FileUpload(HttpPostedFileBase file1, HttpPostedFileBase file2, string firstName)
{
//grab your headers
var headers = Request.Headers;
if (file1 != null)
{
string pic = System.IO.Path.GetFileName(file1.FileName);
string path = System.IO.Path.Combine(Server.MapPath("~/App_Data"), pic);
// file is uploaded
file1.SaveAs(path);
}
if (file2 != null)
{
string pic = System.IO.Path.GetFileName(file2.FileName);
string path = System.IO.Path.Combine(Server.MapPath("~/App_Data"), pic);
// file is uploaded
file2.SaveAs(path);
}
// after successfully uploading redirect the user
return RedirectToAction("Index", "Home");
}
TNSHttpFormDataResponse 属性
- headers - 响应头
- statusCode - HTTP 状态码(数字)
- statusMessage - HTTP 状态码消息(字符串)
- body - 响应体(如果是 JSON,则为解析后的 JSON,否则为原始字符串)