这个框里的图片视频是什么时候上传的

关于iOS如何实现视频和图片的上传, 我们先理清下思路
#1. 如何获取图片?
#2. 如何获取视频?
#3. 如何把图片存到缓存路径中?
#4. 如何把视频存到缓存路径中?
#5. 如何上传?
接下来, 我们按照上面的思路一步一步实现
首先我们新建一个类, 用来储存每一个要上传的文件uploadModel.h
#import &Foundation/Foundation.h&
@interface uploadModel : NSObject
@property (nonatomic, strong) NSString *
@property (nonatomic, strong) NSString *
@property (nonatomic, strong) NSString *
@property (nonatomic, assign) BOOL
#1. 如何获取图片?
从相册选择 或者 拍照,&
这部分可以用UIImagePickerController来实现
- (void)actionPhoto {
UIAlertController *alertController
[UIAlertController alertControllerWithTitle:@""
message:@"上传照片"
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *photoAction
[UIAlertAction actionWithTitle:@"从相册选择"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"从相册选择");
self.imagePicker.sourceType
= UIImagePickerControllerSourceTypePhotoL
self.imagePicker.mediaTypes = @[(NSString *)kUTTypeImage];
self.imagePicker.allowsEditing = YES;
[self presentViewController:self.imagePicker
animated:YES
completion:nil];
UIAlertAction *cameraAction = \
[UIAlertAction actionWithTitle:@"拍照"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"拍照");
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
self.imagePicker.sourceType
= UIImagePickerControllerSourceTypeC
self.imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeP
self.imagePicker.cameraDevice
= UIImagePickerControllerCameraDeviceR
self.imagePicker.allowsEditing
[self presentViewController:self.imagePicker
animated:YES
completion:nil];
UIAlertAction *cancelAction = \
[UIAlertAction actionWithTitle:@"取消"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"取消");
[alertController addAction:photoAction];
[alertController addAction:cameraAction];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];
#2. 如果获取视频?
从相册选择 或者 拍摄
这部分也可以用UIImagePickerController来实现
- (void)actionVideo {
UIAlertController *alertController = \
[UIAlertController alertControllerWithTitle:@""
message:@"上传视频"
preferredStyle:UIAlertControllerStyleActionSheet];
UIAlertAction *photoAction = \
[UIAlertAction actionWithTitle:@"从视频库选择"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"从视频库选择");
self.imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoL
self.imagePicker.mediaTypes = @[(NSString *)kUTTypeMovie];
self.imagePicker.allowsEditing = NO;
[self presentViewController:self.imagePicker animated:YES completion:nil];
UIAlertAction *cameraAction = \
[UIAlertAction actionWithTitle:@"录像"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"录像");
self.imagePicker.sourceType = UIImagePickerControllerSourceTypeC
self.imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceR
self.imagePicker.mediaTypes = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera];
self.imagePicker.videoQuality = UIImagePickerControllerQualityType640x480;
self.imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModeV
self.imagePicker.allowsEditing = YES;
[self presentViewController:self.imagePicker animated:YES completion:nil];
UIAlertAction *cancelAction = \
[UIAlertAction actionWithTitle:@"取消"
style:UIAlertActionStyleCancel
handler:^(UIAlertAction * _Nonnull action) {
NSLog(@"取消");
[alertController addAction:photoAction];
[alertController addAction:cameraAction];
[alertController addAction:cancelAction];
[self presentViewController:alertController animated:YES completion:nil];
#3, 关于缓存, 如何把照片存入缓存目录?
这部分我们先考虑缓存目录, 一般存在Document 或者 Temp里面
我们给图片和视频各创建一个缓存目录:
#define PHOTOCACHEPATH [NSTemporaryDirectory() stringByAppendingPathComponent:@"photoCache"]
#define VIDEOCACHEPATH [NSTemporaryDirectory() stringByAppendingPathComponent:@"videoCache"]
把UIImage存入缓存的方法:
//将Image保存到缓存路径中
- (void)saveImage:(UIImage *)image toCachePath:(NSString *)path {
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:PHOTOCACHEPATH]) {
NSLog(@"路径不存在, 创建路径");
[fileManager createDirectoryAtPath:PHOTOCACHEPATH
withIntermediateDirectories:YES
attributes:nil
error:nil];
NSLog(@"路径存在");
//[UIImagePNGRepresentation(image) writeToFile:path atomically:YES];
[UIImageJPEGRepresentation(image, <span style="color: #) writeToFile:path atomically:YES];
4. 如何把视频存入缓存?
把视频存入缓存的方法:
//将视频保存到缓存路径中
- (void)saveVideoFromPath:(NSString *)videoPath toCachePath:(NSString *)path {
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath:VIDEOCACHEPATH]) {
NSLog(@"路径不存在, 创建路径");
[fileManager createDirectoryAtPath:VIDEOCACHEPATH
withIntermediateDirectories:YES
attributes:nil
error:nil];
NSLog(@"路径存在");
[fileManager copyItemAtPath:videoPath toPath:path error:&error];
if (error) {
NSLog(@"文件保存到缓存失败");
从缓存获取图片的方法:
//从缓存路径获取照片
- (UIImage *)getImageFromPath:(NSString *)path {
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path]) {
return [UIImage imageWithContentsOfFile:path];
上传图片和视频的时候我们一般会利用当前时间给文件命名, 方法如下
//以当前时间合成图片名称
- (NSString *)getImageNameBaseCurrentTime {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
return [[dateFormatter stringFromDate:[NSDate date]] stringByAppendingString:@".JPG"];
//以当前时间合成视频名称
- (NSString *)getVideoNameBaseCurrentTime {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];
return [[dateFormatter stringFromDate:[NSDate date]] stringByAppendingString:@".MOV"];
有时候需要获取视频的第一帧作为显示, 方法如下:
//获取视频的第一帧截图, 返回UIImage
//需要导入AVFoundation.h
- (UIImage*) getVideoPreViewImageWithPath:(NSURL *)videoPath
AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:videoPath options:nil];
AVAssetImageGenerator *gen
= [[AVAssetImageGenerator alloc] initWithAsset:asset];
gen.appliesPreferredTrackTransform = YES;
CMTime time
= CMTimeMakeWithSeconds(<span style="color: #.0, <span style="color: #0);
NSError *error
CMTime actualT
CGImageRef image = [gen copyCGImageAtTime:time actualTime:&actualTime error:&error];
UIImage *img
= [[UIImage alloc] initWithCGImage:image];
5. 如何上传?
下面就是上传方法:
我把服务器地址xx掉了, 大家可以改为自己的
//上传图片和视频
- (void)uploadImageAndMovieBaseModel:(uploadModel *)model {
//获取文件的后缀名
NSString *extension = [model.name componentsSeparatedByString:@"."].lastO
//设置mimeType
NSString *mimeT
if ([model.type isEqualToString:@"image"]) {
mimeType = [NSString stringWithFormat:@"image/%@", extension];
mimeType = [NSString stringWithFormat:@"video/%@", extension];
//创建AFHTTPSessionManager
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//设置响应文件类型为JSON类型
manager.responseSerializer
= [AFJSONResponseSerializer serializer];
//初始化requestSerializer
manager.requestSerializer
= [AFHTTPRequestSerializer serializer];
manager.responseSerializer.acceptableContentTypes =
//设置timeout
[manager.requestSerializer setTimeoutInterval:<span style="color: #.0];
//设置请求头类型
[manager.requestSerializer setValue:@"form/data" forHTTPHeaderField:@"Content-Type"];
//设置请求头, 授权码
[manager.requestSerializer setValue:@"YgAhCMxEehT4N/DmhKkA/M0npN3KO0X8PMrNl17+hogw944GDGpzvypteMemdWb9nlzz7mk1jBa/0fpOtxeZUA==" forHTTPHeaderField:@"Authentication"];
//上传服务器接口
NSString *url = [NSString stringWithFormat:@"http://xxxxx.xxxx.xxx.xx.x"];
//开始上传
[manager POST:url parameters:nil constructingBodyWithBlock:^(id&AFMultipartFormData&
_Nonnull formData) {
BOOL success = [formData appendPartWithFileURL:[NSURL fileURLWithPath:model.path] name:model.name fileName:model.name mimeType:mimeType error:&error];
if (!success) {
NSLog(@"appendPartWithFileURL error: %@", error);
} progress:^(NSProgress * _Nonnull uploadProgress) {
NSLog(@"上传进度: %f", uploadProgress.fractionCompleted);
} success:^(NSURLSessionDataTask * _Nonnull task, id
_Nullable responseObject) {
NSLog(@"成功返回: %@", responseObject);
model.isUploaded = YES;
[self.uploadedArray addObject:model];
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"上传失败: %@", error);
model.isUploaded = NO;
这里有事先创建两个可变数组uploadArray, uploadedArray, 一个存放准要上传的内容, 一个存放上传完的内容
在准备上传后做什么操作, 可以检查两个数组的数量是否相等
最后是UIImagePickerController的协议方法
#pragma mark - UIImagePickerDelegate methods
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary&NSString *,id& *)info {
[picker dismissViewControllerAnimated:YES completion:nil];
//获取用户选择或拍摄的是照片还是视频
NSString *mediaType = info[UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
//获取编辑后的照片
NSLog(@"获取编辑后的好片");
UIImage *tempImage = info[UIImagePickerControllerEditedImage];
//将照片存入相册
if (tempImage) {
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
//将照片存入相册
NSLog(@"将照片存入相册");
UIImageWriteToSavedPhotosAlbum(tempImage, self, nil, nil);
//获取图片名称
NSLog(@"获取图片名称");
NSString *imageName = [self getImageNameBaseCurrentTime];
NSLog(@"图片名称: %@", imageName);
//将图片存入缓存
NSLog(@"将图片写入缓存");
[self saveImage:tempImage
toCachePath:[PHOTOCACHEPATH stringByAppendingPathComponent:imageName]];
//创建uploadModel
NSLog(@"创建model");
uploadModel *model = [[uploadModel alloc] init];
model.path
= [PHOTOCACHEPATH stringByAppendingPathComponent:imageName];
model.name
model.type
= @"image";
model.isUploaded = NO;
//将模型存入待上传数组
NSLog(@"将Model存入待上传数组");
[self.uploadArray addObject:model];
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie]) {
if (picker.sourceType == UIImagePickerControllerSourceTypeCamera) {
//如果是拍摄的视频, 则把视频保存在系统多媒体库中
NSLog(@"video path: %@", info[UIImagePickerControllerMediaURL]);
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:info[UIImagePickerControllerMediaURL] completionBlock:^(NSURL *assetURL, NSError *error) {
if (!error) {
NSLog(@"视频保存成功");
NSLog(@"视频保存失败");
//生成视频名称
NSString *mediaName = [self getVideoNameBaseCurrentTime];
NSLog(@"mediaName: %@", mediaName);
//将视频存入缓存
NSLog(@"将视频存入缓存");
[self saveVideoFromPath:info[UIImagePickerControllerMediaURL] toCachePath:[VIDEOCACHEPATH stringByAppendingPathComponent:mediaName]];
//创建uploadmodel
uploadModel *model = [[uploadModel alloc] init];
model.path
= [VIDEOCACHEPATH stringByAppendingPathComponent:mediaName];
model.name
model.type
= @"moive";
model.isUploaded = NO;
//将model存入待上传数组
[self.uploadArray addObject:model];
//[picker dismissViewControllerAnimated:YES completion:nil];
- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker {
[picker dismissViewControllerAnimated:YES completion:nil];
阅读(...) 评论()内存已满,手机中的照片和视频又不舍得删,怎么办内存已满,手机中的照片和视频又不舍得删,怎么办网扒百家号在日常生活中我们总是能看到您的手机内存已满、请你清理磁盘等文字,每当出现这种情况的时候心里总是很烦躁,手机中的照片和视频不舍得删,各类软件不能删,很纠结,何以解忧?一、扩容随着大数据时代来临,我们的手机容量已经完全达不到日常生活需求,土豪除外,想想小编大学生活用的小灵通,摩托罗拉128M、256M,自己根本没有容量定义,总之,扩容需谨慎,辟如iPhone,因为一个不小心手机变板儿砖,不再是谣言,建议找技术过硬的专业人员。二、导入QQ微云这个比较繁琐,因为qq空间不能直接转到微云。,微云的主要目的是实现电脑和手机的同步,目前功能还不完善,像之前说的先保存了再上传的话照片太多了是很麻烦的,可以作为备用。三、收藏到QQ收藏夹QQ收藏功能可以收藏聊天窗口的文字、图片、链接等各种信息,具体将鼠标移动到图片上,然后就会出现“收藏”,点击即可收藏。四、使用微信收藏夹那么从微信上收藏照片,但是在图库上找不到,这是为什么,相片被保存在哪里了?答案在这里,tencent/micromsg/camera 或者tencent/micromsg/download,或者可以安装第三方图库软件,不设置,默认扫描就有。五、上传导入到电脑地球人都会,保证电脑不坏,上传的数据永久安全。六、上传到百度云盘百度云,终身存储,随取随用,在上传图片视频同时,它还可以上传文档、音频文件等。七、上传到QQ空间相册相当于自己的一个私人网站,空间相册可以满足日常需求。本文仅代表作者观点,不代表百度立场。系作者授权百家号发表,未经许可不得转载。网扒百家号最近更新:简介:专门给您提供好笑、有趣、有深度的文章作者最新文章相关文章如何上传视频与照片 在我的小家里点击相册再按提示点击就可以上传了。_百度宝宝知道他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)怎样在视频中的任意位置添加图片
小编最近在看一个电视剧,这个电视剧只能用优酷的播放器进行播放,但优酷播放器真是让我很奔溃,看一集视频起码要插播三次广告,简直全程无感。幸好之前解决了 优酷视频转换格
&&&&& 小编最近在看一个电视剧,这个电视剧只能用优酷的播放器进行播放,但优酷播放器真是让我很奔溃,看一集视频起码要插播三次广告,简直全程无感。幸好之前解决了的问题,不然我真是要放弃优酷播放器了。说到视频中间插播广告的问题,让我想起了最近狸友的一个需求,说是想知道。既然大家有需求,那狸窝当然就得帮大家解决,亲`亲`,这样的狸窝简直让人欲罢不能!话说在视频中穿插图片其实也是非常简单的哈。
&&&&&&此教程方案所用到的工具下载:
&&&&&&下载运行今天所用到的工具后先选择视频的宽高比模式,一般没有特殊情况我都选择模式为4:3,大家也可以根据自己的需要进行选择。点击&导入&,选择&导入文件&,在打开对话框中选择事先准备好的图片素材和视频素材。我这里是添加了两张图片素材,这样就可以在视频中不同的位置插入不同的图片。
&&&&&&点击选择导入进来的视频素材,因为我们选择需要把视频素材放置在相应的视频轨道上,右击视频素材,在弹出的菜单中选择&添加到轨道&,或者直接将视频素材拖放到软件界面下方的视频轨上。在软件界面的右上角可以对视频文件进行预览。
&&&&&&我们先来确定的位置。点击选择视频轨上的视频,移动播放滑块,把播放滑块移动到要添加图片的位置。或者是在软件界面右上角播放视频,当播放到想要添加图片的位置时暂停播放,这样也能准确的定位到要添加图片的位置。确定视频中要添加图片的位置后点击&分割&功能按钮。
&&&&&&因为一个完整的视频只能在视频片头或者是片尾添加图片,没办法把图片添加在视频中间,所以要先对视频进行分割。现在可以看到我们把成了两个部分,这样就可以把图片放置在这两段视频之间了。右击图片素材,选择&添加到轨道&。
&&&&&&我们可以自己设置图片的显示时间。先点击选择视频轨上的图片,当鼠标指针呈箭头状态时,按住鼠标左键拖动,可以更改图片的显示时间。如果想让图片的显示时间更精确,可以先点击选择图片,然后点击&设置时长&,在设置时长的对话框中设置图片的持续显示时间。设置好后点击&确定&。
&&&&&&按照上面的方法可以在不同的视频位置添加不同的图片,并设置图片的显示时间。我们还可以在插入的图片上添加一些特效文字说明。在软件右上角的预览窗口可以对视频效果进行预览,最后点击&导出&按钮进行导出。
&&&&&&选择视频的导出格式,接着设置视频导出名称和输出目录,设好后点击&导出&。导出的时候会有导出进度条,导出完成后可以选择播放刚刚导出的视频,也可以选择打开视频文件所在的文件夹,或者是关闭软件。
&&&&&&本想给大家展示一下视频效果的,但上传到播放器说我视频&内容低俗、格调不高&,给屏蔽了,所以只能上传到网盘分享给大家了。视频文件不大,大家可以下载观看:。我是在视频中穿插图片的基础上还添加了特效文字,有兴趣的小伙伴可以参考我之前的教程方案。
&&&&&&今天用到的这个工具其实还挺强大的,可以对、视频合并、、以及把照片制作成视频等等。但是有一个小小的不完美,一般在运行软件的时候会提示软件更新,但我们不能选择更新,因为更新后输出的视频会有相关的水印,所以我们需要直接忽略更新。
------分隔线----------------------------
一个激灵想到了前几个月发生的川大玻璃杯事件,不知道大家听...
亲们,做个小小的问答:在你们看电影或者下载电影之后,用到...
现在网络上流行着很多高清视频和电影,有些高清电影的格式叫...
随着智能手机的流行,自拍照和自拍视频已经屡见不鲜,好友聚...
答狸友问,我想把视频结尾部分视频去掉,然后换上一段其他视...
昨天是里约奥运会开始的日子,因为奥运会的开幕,感觉现在的...

我要回帖

更多关于 产品展示框 的文章

 

随机推荐